问一个问题,热键可以设为一个键吗?
热键可以设为一个键吗?比如不用组合,只按下“~”就可以
我说的是API的
---------------------------------------------------------------
1。先声明如下api函数及常量,同时声明一个类变量HotKeyID用于记录热键ID
Public Declare Auto Function RegisterHotKey Lib "user32.dll" Alias _
"RegisterHotKey" (ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Boolean
Public Declare Auto Function UnRegisterHotKey Lib "user32.dll" Alias _
"UnregisterHotKey" (ByVal hwnd As IntPtr, ByVal id As Integer) As Boolean
Public Declare Auto Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" (ByVal lpString As String) As Short
Public Const MOD_ALT As Integer = &H1
Public Const MOD_CONTROL As Integer = &H2
Public Const MOD_SHIFT As Integer = &H4
Public Const MOD_WIN As Integer = &H8
Public Const WM_HOTKEY As Integer = &H312
private HotKeyID as Short=-1
2。然后在窗体类的初始化函数中注册热键
Public Sub New()
MyBase.New()
'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()
HotkeyId = GlobalAddAtom("TestHotkey")
If RegisterHotKey(Me.Handle, HotkeyId, MOD_ALT, Keys.G) = FALSE Then
MessageBox.Show("注册热键失败")
End If
'在 InitializeComponent() 调用之后添加任何初始化
End Sub
3。然后重载窗体类的wndpro方法
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Select Case m.Msg
Case WM_HOTKEY ‘这里仅仅给出一个示例,实际的代码根据实际情况改变
Me.Visible = Not Me.Visible
Case Else
MyBase.WndProc(m)
End Select
End Sub
4.重写窗体类的Dispose方法
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
if HotKeyID <>-1 then
UnRegisterHotKey(Me.Handle, HotkeyId)
end if
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
--------------------------------------------------------------
以上代码是实现HOTKEY的,如果可以的话怎么改?