很多人都很想在自己的程序中加入热键,下面我把我写的一个热键类贴出来,大家可以参考参考,以后热键写起来就方便了~
clsHotKey
{
Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long) As Long
'Private Const WM_HOTKEY = &H312
Private Const MOD_ALT = &H1
Private Const MOD_CONTROL = &H2
Private Const MOD_SHIFT = &H4
Private Const GWL_WNDPROC = (-4)
Private lHKeyID As New Collection
Private lWinProc As Long
Private lHwnd As Long
Public Enum ModKey
KEY_NONE = &H0
KEY_ALT = &H1
KEY_CTRL = &H2
KEY_SHIFT = &H4
End Enum
Public Function CreatHotkey(Modifiers As ModKey, uVirtKey As KeyCodeConstants, HotKeyID As Long) As Long
CreatHotkey = RegisterHotKey(lHwnd, HotKeyID, Modifiers, uVirtKey)
End Function
Private Sub Class_Terminate()
Dim i As Integer
Call SetWindowLong(lHwnd, GWL_WNDPROC, lWinProc)
For i = 1 To lHKeyID.Count
Call UnregisterHotKey(lHwnd, lHKeyID(i))
Next i
End Sub
Public Function RegWin(hWnd As Long, NewLong As Long, preWinProc As Long) As Long
preWinProc = GetWindowLong(hWnd, GWL_WNDPROC)
lWinProc = preWinProc
lHwnd = hWnd
RegWin = SetWindowLong(hWnd, GWL_WNDPROC, NewLong) '这句调试成功后最好注释掉,原因见调试不要热键
End Function
}
以上就是我写的热键类,使用起来非常简单,如下是一个实例:
Form1:
{
Option Explicit
Dim hk As clsHotKey
Private Sub Form_Load()
Dim p As Long
Set hk = New clsHotKey
hk.RegWin hWnd, AddressOf forHotKey, p
If hk.CreatHotkey(KEY_CTRL Or KEY_ALT, vbKeyQ, 1) = 0 Then MsgBox "热键Ctrl+Alt+Q注册失败"
If hk.CreatHotkey(KEY_NONE, vbKeyF9) = 0 Then MsgBox "热键F9注册失败"
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set hk = Nothing
End Sub
}
Module1:
{
Public Function forHotKey(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If wParam = 1 Then
MsgBox "您点击了Ctrl+Alt+Q"
ElseIf wParam = 2 Then
MsgBox "您点击了F9"
End If
End Function
}
大家觉得如何?是不是很简单?

被折叠的 条评论
为什么被折叠?



