全局热键(RegisterHotKey)偶数形式未显示在任务栏中

时间:2018-05-29 16:56:45

标签: vb.net

我有一个有4个功能的程序。当表单最小化时,我显示 NotifyIcon 并将表单隐藏在任务栏中。

Private Sub FrmMain_Resize(sender As Object, e As EventArgs) Handles Me.Resize
    If Me.WindowState = FormWindowState.Minimized Then
        NotifyIcon1.Visible = True
        NotifyIcon1.Icon = SystemIcons.Application
        NotifyIcon1.BalloonTipIcon = ToolTipIcon.Info
        NotifyIcon1.BalloonTipTitle = "Some Text"
        NotifyIcon1.BalloonTipText = "Some Text"
        NotifyIcon1.ShowBalloonTip(1000)
        Me.ShowInTaskbar = False
    End If
End Sub

Private Sub NotifyIcon1_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles NotifyIcon1.MouseDoubleClick
    Me.ShowInTaskbar = True
    Me.WindowState = FormWindowState.Normal
    NotifyIcon1.Visible = False
End Sub

即使程序被隐藏,我仍然想要使用热键执行4个功能。我找到了这个,但只有当我没有在任务栏中隐藏表单时它才有效。

Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer
Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer) As Integer

Public Const WM_HOTKEY As Integer = &H312

Private Enum KeyModifier
    None = 0
    Alt = &H1
    Control = &H2
    Shift = &H4
    Winkey = &H8
End Enum

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    If m.Msg = WM_HOTKEY Then
        If m.WParam = 1001 Then
            btnFunction1.PerformClick()
        ElseIf m.WParam = 1002 Then
            btnFunction2.PerformClick()
        ElseIf m.WParam = 1003 Then
            btnFunction3.PerformClick()
        ElseIf m.WParam = 1004 Then
            btnFunction4.PerformClick()
        End If
    End If
    MyBase.WndProc(m)
End Sub

Private Sub FrmMain_Closed(sender As Object, e As EventArgs) Handles Me.Closed
    Call UnregisterHotKey(Me.Handle, 1001)
    Call UnregisterHotKey(Me.Handle, 1002)
    Call UnregisterHotKey(Me.Handle, 1003)
    Call UnregisterHotKey(Me.Handle, 1004)
End Sub

Private Sub FrmClient_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    NotifyIcon1.Text = Me.Text
    Call RegisterHotKey(Me.Handle, 1001, KeyModifier.Alt, Keys.F1)
    Call RegisterHotKey(Me.Handle, 1002, KeyModifier.Alt, Keys.F2)
    Call RegisterHotKey(Me.Handle, 1003, KeyModifier.Alt, Keys.F3)
    Call RegisterHotKey(Me.Handle, 1004, KeyModifier.Alt, Keys.F4)
End Sub

是否有办法使用 RegisterHotKey ,即使表单 ShowInTaskbar 设置为False?

0 个答案:

没有答案
相关问题