Vb.net 注册3个热键?可能的

Vb.net 注册3个热键?可能的,vb.net,hotkeys,Vb.net,Hotkeys,您好,我正在尝试在VB.NET中使用RegisterHeyKeys,但是我使用了两个热键,我只是尝试在第三个热键中添加热键,它给出了太多的参数。这可能是非常简单的事情,我也是一个小矮人,所以放轻松。哈哈。任何帮助都将不胜感激 以下是迄今为止的代码: Public Const MOD_CONTROL As Integer = &H11 Public Const MOD_SHIFT As Integer = &H10 Public Const WM_HOTKEY As Integer

您好,我正在尝试在VB.NET中使用RegisterHeyKeys,但是我使用了两个热键,我只是尝试在第三个热键中添加热键,它给出了太多的参数。这可能是非常简单的事情,我也是一个小矮人,所以放轻松。哈哈。任何帮助都将不胜感激

以下是迄今为止的代码:

Public Const MOD_CONTROL As Integer = &H11
Public Const MOD_SHIFT As Integer = &H10
Public Const WM_HOTKEY As Integer = &H312

<DllImport("User32.dll")> _
Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, _
ByVal id As Integer, ByVal fsModifiers As Integer, _
ByVal vk As Integer) As Integer
End Function

<DllImport("User32.dll")> _
Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, _
                    ByVal id As Integer) As Integer
End Function

Private Sub Form1_Load(ByVal sender As System.Object, _
                    ByVal e As System.EventArgs) Handles MyBase.Load
    RegisterHotKey(Me.Handle, 100, MOD_CONTROL, MOD_SHIFT, Keys.D2)
    RegisterHotKey(Me.Handle, 200, MOD_CONTROL, MOD_SHIFT, Keys.D3)
    RegisterHotKey(Me.Handle, 300, MOD_CONTROL, MOD_SHIFT, Keys.D4)
End Sub
Public Const MOD_控件为整数=&H11
Public Const MOD_SHIFT为整数=&H10
Public Const WM_热键为整数=&H312
_
公共共享功能寄存器hotKey(ByVal hwnd作为IntPtr_
ByVal id为整数,ByVal fsModifiers为整数_
ByVal vk(作为整数)作为整数
端函数
_
公共共享函数注销热键(ByVal hwnd作为IntPtr_
ByVal id(作为整数)作为整数
端函数
私有子表单1_加载(ByVal发送方作为System.Object_
ByVal e作为System.EventArgs)处理MyBase.Load
注册表快捷键(Me.Handle,100,MOD_控件,MOD_SHIFT,Keys.D2)
注册表快捷键(Me.Handle,200,MOD_控件,MOD_SHIFT,Keys.D3)
注册表快捷键(Me.Handle,300,MOD_控件,MOD_SHIFT,Keys.D4)
端接头

我看到的问题是,您添加了两个修饰符
MOD_CONTROL
MOD_SHIFT
,并用逗号分隔它们,表示函数有五个参数,即使只需要四个参数。试着像这样把你的修改器组合在一起。您还应使用文档验证修改器关键点是否正确

Private Sub Form1_Load(ByVal sender As System.Object, _
                    ByVal e As System.EventArgs) Handles MyBase.Load
    RegisterHotKey(Me.Handle, 100, MOD_CONTROL Or MOD_SHIFT, Keys.D2)
    RegisterHotKey(Me.Handle, 200, MOD_CONTROL Or MOD_SHIFT, Keys.D3)
    RegisterHotKey(Me.Handle, 300, MOD_CONTROL Or MOD_SHIFT, Keys.D4)
End Sub
从it状态(强调我的):

fsModifiers[in]
类型:UINT

为生成WM_热键信息,必须与uVirtKey参数指定的键一起按下的键。fsModifiers参数可以是以下值的组合


下面是您的程序的工作示例

Public Const MOD_CONTROL As Integer = &H2
Public Const MOD_SHIFT As Integer = &H4
Public Const WM_HOTKEY As Integer = &H312

<DllImport("User32.dll")> _
Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, _
                                      ByVal id As Integer, ByVal fsModifiers As Integer, _
                                      ByVal vk As Integer) As Integer
End Function

<DllImport("User32.dll")> _
Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, _
                ByVal id As Integer) As Integer
End Function

Private Sub Form1_Load(ByVal sender As System.Object, _
                    ByVal e As System.EventArgs) Handles MyBase.Load
    RegisterHotKey(Me.Handle, 100, MOD_CONTROL Or MOD_SHIFT, Keys.D2)
    RegisterHotKey(Me.Handle, 200, MOD_CONTROL Or MOD_SHIFT, Keys.D3)
    RegisterHotKey(Me.Handle, 300, MOD_CONTROL Or MOD_SHIFT, Keys.D4)
End Sub

Protected Overrides Sub DefWndProc(ByRef m As System.Windows.Forms.Message)
    MyBase.DefWndProc(m)
    If m.Msg = WM_HOTKEY Then
        Select Case CType(m.WParam, Integer)
            Case 100
                NotifyIcon1.Text = "Hello"
                NotifyIcon1.ShowBalloonTip(2000, "", NotifyIcon1.Text, ToolTipIcon.Info)
            Case 200
                NotifyIcon1.Text = "World"
                NotifyIcon1.ShowBalloonTip(2000, "", NotifyIcon1.Text, ToolTipIcon.Info)
            Case 300
                NotifyIcon1.Visible = False
                If Not Visible Then Visible = True
        End Select
    End If
End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Me.Hide()
    NotifyIcon1.Icon = Me.Icon
    NotifyIcon1.Visible = True
End Sub
Public Const MOD_控件为整数=&H2
公共常量MOD_移位为整数=&H4
Public Const WM_热键为整数=&H312
_
公共共享功能寄存器hotKey(ByVal hwnd作为IntPtr_
ByVal id为整数,ByVal fsModifiers为整数_
ByVal vk(作为整数)作为整数
端函数
_
公共共享函数注销热键(ByVal hwnd作为IntPtr_
ByVal id(作为整数)作为整数
端函数
私有子表单1_加载(ByVal发送方作为System.Object_
ByVal e作为System.EventArgs)处理MyBase.Load
注册表快捷键(Me.Handle,100,MOD_CONTROL或MOD_SHIFT,Keys.D2)
注册表快捷键(Me.Handle,200,MOD_CONTROL或MOD_SHIFT,Keys.D3)
注册表快捷键(Me.Handle,300,MOD_控件或MOD_SHIFT,Keys.D4)
端接头
受保护的覆盖子DefWndProc(ByRef m As System.Windows.Forms.Message)
MyBase.DefWndProc(m)
如果m.Msg=WM\U热键,则
选择案例CType(m.WParam,整数)
案例100
NotifyIcon1.Text=“你好”
NotifyIcon1.showBallootTip(2000,“,NotifyIcon1.Text,ToolTipIcon.Info)
案例200
NotifyIcon1.Text=“世界”
NotifyIcon1.showBallootTip(2000,“,NotifyIcon1.Text,ToolTipIcon.Info)
案例300
NotifyIcon1.Visible=False
如果不可见,则可见=真
结束选择
如果结束
端接头
私有子按钮1\u单击(发送者作为System.Object,e作为System.EventArgs)处理按钮1。单击
我躲起来
NotifyIcon1.Icon=Me.Icon
NotifyIcon1.Visible=True
端接头

我不知道你所说的修饰词是什么意思。我知道你所说的错误值是什么意思。但这些的正确值是多少?我不明白。对不起,没有问题p修改器是MOD_控件和MOD_SHIFT。我在答案中包含了文档,把它们看作是我使用microsofts命名法的控制键。正确的值应为:
MOD\u CONTROL
=&H2和
MOD\u SHIFT
=&H4@JJR. 我刚刚添加了我用来测试的示例,我看到了。这段代码很有效,非常感谢,但是,当它最小化到托盘时,它仍然不起作用。我从其他论坛帖子中得到的印象是,如果你使用注册热键,即使程序最小化到托盘,它也会工作。现在,当它没有聚焦时,它在背景中工作,但当它在托盘中时,它就不工作了。有什么想法吗?@JJR。正常情况下,当我将其最小化时,它会工作,您如何将其最小化到托盘?
Public Const MOD_CONTROL As Integer = &H2
Public Const MOD_SHIFT As Integer = &H4
Public Const WM_HOTKEY As Integer = &H312

<DllImport("User32.dll")> _
Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, _
                                      ByVal id As Integer, ByVal fsModifiers As Integer, _
                                      ByVal vk As Integer) As Integer
End Function

<DllImport("User32.dll")> _
Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, _
                ByVal id As Integer) As Integer
End Function

Private Sub Form1_Load(ByVal sender As System.Object, _
                    ByVal e As System.EventArgs) Handles MyBase.Load
    RegisterHotKey(Me.Handle, 100, MOD_CONTROL Or MOD_SHIFT, Keys.D2)
    RegisterHotKey(Me.Handle, 200, MOD_CONTROL Or MOD_SHIFT, Keys.D3)
    RegisterHotKey(Me.Handle, 300, MOD_CONTROL Or MOD_SHIFT, Keys.D4)
End Sub

Protected Overrides Sub DefWndProc(ByRef m As System.Windows.Forms.Message)
    MyBase.DefWndProc(m)
    If m.Msg = WM_HOTKEY Then
        Select Case CType(m.WParam, Integer)
            Case 100
                NotifyIcon1.Text = "Hello"
                NotifyIcon1.ShowBalloonTip(2000, "", NotifyIcon1.Text, ToolTipIcon.Info)
            Case 200
                NotifyIcon1.Text = "World"
                NotifyIcon1.ShowBalloonTip(2000, "", NotifyIcon1.Text, ToolTipIcon.Info)
            Case 300
                NotifyIcon1.Visible = False
                If Not Visible Then Visible = True
        End Select
    End If
End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Me.Hide()
    NotifyIcon1.Icon = Me.Icon
    NotifyIcon1.Visible = True
End Sub