VB 全局热键HOOK (不占系统资源版本)

这篇博客介绍了如何使用VB编写一个占用极少系统资源的全局热键HOOK。通过声明并使用API函数,实现了在VB中设置和移除全局热键,并在热键被按下时触发特定事件。示例代码展示了如何注册和注销热键,以及处理热键消息的Wndproc函数。
摘要由CSDN通过智能技术生成

VB 全局热键HOOK (不占系统资源版本)

看过网上很多的全局热键的写法,几乎都用 do loop 写,很占资源。
这个是占很少资源的 全局热键。

Option Explicit

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 GetWindowLong Lib "User32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex 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 RegisterHotKey Lib "User32" (ByVal hwnd As Long, ByVal id As Long, _
ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare Function UnregisterHotKey Lib "User32" (ByVal hwnd As Long, ByVal id As Long) _
As Long

Private preWinProc As Long
Private Modifiers As Long, uVirtKey As Long, idHotKey As Long

Private Const WM_HOTKEY = &H312
Private Const GWL_WNDPROC = (-4)

Public Enum ThreeKey
    CTRL = &H2
    Shift = &H4
    ALT = &H1
    NONE = &H0
End Enum

Private Type taLong
    ll As Long
End Type

Private Type t2Int
    lWord As Integer
    hWord As Integer
End Type

Private Function Wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

    If Msg = WM_HOTKEY Then
        If wParam = idHotKey Then
            Dim lp As taLong, i2 As t2Int
            lp.ll = lParam
            LSet i2 = lp
            If (i2.lWord = Modifiers) And i2.hWord = uVirtKey Then '最好自己写
                MsgBox "你按下了热键哦~"
            End If
        End If
    End If
    Wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)

End Function

Public Sub RegHotKey(FormHwnd As Long, fiers As ThreeKey, vKey As Long, Optional HotKey As Long = 1)
    preWinProc = GetWindowLong(FormHwnd, GWL_WNDPROC)
    SetWindowLong FormHwnd, GWL_WNDPROC, AddressOf Wndproc
    idHotKey = HotKey
    Modifiers = fiers
    uVirtKey = vKey
    RegisterHotKey FormHwnd, idHotKey, Modifiers, uVirtKey
End Sub

Public Sub UnRegHotKey(FormHwnd As Long)
    SetWindowLong FormHwnd, GWL_WNDPROC, preWinProc
    Call UnregisterHotKey(FormHwnd, uVirtKey)
End Sub

调用代码如下:

Private Sub Form_Load()
    RegHotKey Me.hwnd, CTRL + ALT, vbKeyD
End Sub

Private Sub Form_Unload(Cancel As Integer)
    UnRegHotKey Me.hwnd
End Sub

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值