应用:热键类

  很多人都很想在自己的程序中加入热键,下面我把我写的一个热键类贴出来,大家可以参考参考,以后热键写起来就方便了~

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()
    DimAs 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

}

  大家觉得如何?是不是很简单?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值