我有一个有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?