打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
读取键盘事件

模块:

Option Explicit

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

Public Const WM_HOTKEY = &H312
Public Const MOD_ALT = &H1
Public Const MOD_CONTROL = &H2
Public Const MOD_SHIFT = &H4
Public Const GWL_WNDPROC = (-4)

Public preWinProc As Long
Public Modifiers As Long, uVirtKey As Long, idHotKey As Long

Private Type taLong
     ll As Long
End Type

Private Type t2Int
     lWord As Integer
     hWord As Integer
End Type

Public 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


窗口:

Private Sub Form_Load()
Dim ret As Long
preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf Wndproc)
idHotKey = 1

'注册热键为 Ctrl + Alt + A
Modifiers = MOD_ALT + MOD_CONTROL
uVirtKey = vbKeyA
'如果你需要用的是F4
'Modifiers=0
'uVirtKey=vbKeyF4
'===============

ret = RegisterHotKey(Me.hwnd, idHotKey, Modifiers, uVirtKey)
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim ret As Long
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
Call UnregisterHotKey(Me.hwnd, uVirtKey)

End Sub

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
改变ComboBox中ListBox的宽度
动态创建菜单,添加菜单,执行自己的菜单事件
VB入门技巧N例(1)
VB在系统托盘为程序添加图标
什么是VB进行子类化及简单介绍
VB6(RichTextBox)有这的现象,无法解析
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服