Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WH_KEYBOARD = 2
Public Const WH_KEYBOARD_LL = 13
Public Const WH_SHELL = 10
Public Const WH_GETMESSAGE = 3
Public Const WH_CALLWNDPROC = 4
Public Const PM_KEY_SPACE = &H20 '空格键Public hHook As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Type tagKBDLLHOOKSTRUCT
vkCode As Integer
scanCode As Integer
flags As Long
Time As Long
dwExtraInfo As Long
End Type
Public Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As LongSub EnableHook() '定义EnableHook
'设置拦截
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf Myfunc, App.hInstance, 0)
End Sub
Sub DisableHook() '定义DisableHook
Dim ret As Long
ret = UnhookWindowsHookEx(hHook) '取消拦截
End Sub
Function Myfunc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 'wParam代表按键
'
Dim kk As tagKBDLLHOOKSTRUCT
Dim kb As Long, pks As Byte
'Debug.Print wParam
CopyMemory kk, lParam, Len(kk)
Form1.Text1 = wParam
Form1.Label1 = kk.vkCode & ":" & kk.scanCode & ":" & kk.Time
'If wParam = 256 Then
Myfunc = 1: Exit Function
'endif
Myfunc = CallNextHookEx(hHook, ncode, wParam, lParam) '传到下一个拦截
End Function是一个全局键盘钩子,可是我得到的wParam怎么始终是 按下是256 弹出键则是257 无论按哪个都是这两个值在变.我把 hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf Myfunc, App.hInstance, 0) 中的WH_KEYBOARD_LL改成WH_KEYBOARD就可以得到对应按键的ASCII码,但是不能捕捉到全局的键盘消息了,也就是如焦点在记事本中按键的时候不能捕捉到.
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WH_KEYBOARD = 2
Public Const WH_KEYBOARD_LL = 13
Public Const WH_SHELL = 10
Public Const WH_GETMESSAGE = 3
Public Const WH_CALLWNDPROC = 4
Public Const PM_KEY_SPACE = &H20 '空格键Public hHook As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Type tagKBDLLHOOKSTRUCT
vkCode As Integer
scanCode As Integer
flags As Long
Time As Long
dwExtraInfo As Long
End Type
Public Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As LongSub EnableHook() '定义EnableHook
'设置拦截
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf Myfunc, App.hInstance, 0)
End Sub
Sub DisableHook() '定义DisableHook
Dim ret As Long
ret = UnhookWindowsHookEx(hHook) '取消拦截
End Sub
Function Myfunc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 'wParam代表按键
'
Dim kk As tagKBDLLHOOKSTRUCT
Dim kb As Long, pks As Byte
'Debug.Print wParam
CopyMemory kk, lParam, Len(kk)
Form1.Text1 = wParam
Form1.Label1 = kk.vkCode & ":" & kk.scanCode & ":" & kk.Time
'If wParam = 256 Then
Myfunc = 1: Exit Function
'endif
Myfunc = CallNextHookEx(hHook, ncode, wParam, lParam) '传到下一个拦截
End Function是一个全局键盘钩子,可是我得到的wParam怎么始终是 按下是256 弹出键则是257 无论按哪个都是这两个值在变.我把 hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf Myfunc, App.hInstance, 0) 中的WH_KEYBOARD_LL改成WH_KEYBOARD就可以得到对应按键的ASCII码,但是不能捕捉到全局的键盘消息了,也就是如焦点在记事本中按键的时候不能捕捉到.
解决方案 »
- 请教各位:哪儿能找到关于做microsoft expression web designer插件的资料?
- 只挂2小时就结扎的贴!斑主给点面子不要移到非技术去,放分
- mscomct2.oca是什么文件呀?mscomct2.ocx我是知道的,可是oca是什么呀?
- 求VB6实时读取COM中数据的程序?具体请进,解决后200分,非常感谢!
- 这个问题我问过一遍了,但是没有得到解决,再来问一问试试
- 给每一个扇型的点加颜色??????????
- 高难度问题!!inet控件
- 谁有串口读写卡的源程序,救命急用!!!
- VBA挑战高手的一个问题!
- 关于用VB制作报表的问题
- 如何读取文本框1的一行到多行数据?
- 我用VB做了一个图书管理系统,怎么把连接ACCESS的绝对地址,改成相对地址!
改为
CopyMemory kk, byval lParam, Len(kk)
vb中必须调用标准Dll才能实现全局钩子!!!!
http://blog.chenoe.com/blog/article.asp?id=2085