解决方案 »
- 急求!!!!vbs获取cpu核数
- 关于Excel报表生成的问题,总是说 range 的_application方法失败,为什么呀
- 设计软件时的问题!
- 要求将"数据库导入错误,再次高分寻求高手指点!"贴子置顶
- 菜鸟请教VB中简单查询问题~~
- 请大家帮忙,用vb+access做一个统计小软件?
- 关于VB调用EXCEL表后,能否让EXCEL窗口保持最大,且不可调整?
- 关于 ACTIVEX部件不能创建对象。帮帮我吧
- 为什么用vb打包程序打的包,有些控件必须防在winsys(win2000 在winnt\system32 下)
- 关于Activex控件升版后在vc下编写的程序不能使用的问题.
- 各位熟悉VB的朋友,能帮忙看看这几行代码的意思么?
- vb-fontsize属性
我试过HOOK啊,只能捕获普通的按键消息。多媒体键就捕获不到。能给个详细代码吗,谢谢!
不知道怎么HOOK他们啊,能不能给段怎么HOOK的代码?先谢谢大哥啦。我这有一段HOOD代码,可以测试一部分多媒体键,但是测试出的scanCode、vkCode值与字母键一样的。有没有办法得到每个按键的唯一码值?
代码如下:
模块代码:Option ExplicitPrivate Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As LongPrivate Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As LongPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Type PKBDLLHOOKSTRUCTvkCode As LongscanCode As Longflags As Longtime As LongdwExtraInfo As LongEnd TypePrivate Const WM_KEYDOWN = &H100Private Const WM_SYSKEYDOWN = &H104Private Const WM_KEYUP = &H101Private Const WM_SYSKEYUP = &H105Private Const VK_LWIN = &H5BPrivate Const VK_RWIN = &H5CPrivate Const VK_F1 = &H70
Private Const VK_F2 = &H71
Private Const VK_F3 = &H72
Private Const VK_F4 = &H73
Private Const VK_F5 = &H74
Private Const VK_F6 = &H75
Private Const VK_F7 = &H76
Private Const VK_F8 = &H77
Private Const VK_F9 = &H78
Private Const VK_F10 = &H79
Private Const VK_F11 = &H7A
Private Const VK_F12 = &H7BPrivate Const VK_LSHIFT = &HA0Private Const HC_ACTION = 0Private Const WH_KEYBOARD_LL = 13Private lngHook As Long'使用底层KeyboardHook拦截按键消息Public Function LowLevelKeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As LongDim blnHook As BooleanDim p As PKBDLLHOOKSTRUCTIf nCode = HC_ACTION ThenSelect Case wParamCase WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUPCall CopyMemory(p, ByVal lParam, Len(p))Form1.List1.AddItem "wParam=" & wParam & ", lParam=" & Hex(lParam) & ", p.vkCode=" & Hex(p.vkCode) '在list1列表中显示vkCode码
Form1.List1.ListIndex = Form1.List1.NewIndexForm1.List2.AddItem "wParam=" & wParam & ", lParam=" & Hex(lParam) & ", scanCode=" & Hex(p.scanCode) '在list2列表中显示scanCode码
Form1.List2.ListIndex = Form1.List2.NewIndexIf p.vkCode = VK_LWIN Or p.vkCode = VK_RWIN Then '按下了左/右Win键
If wParam = 256 Then
Form1.Label1.BackColor = &HFF& 'WIN键按下时Label1显示红色
Else
Form1.Label1.BackColor = &H5234& 'WIN键放开时Label1显示绿色
End If
blnHook = True '屏蔽WIN键,即按下WIN键时不会弹出开始菜单
End IfIf p.vkCode = VK_LSHIFT Then
If wParam = 256 Then
Form1.Label2.BackColor = &HFF&
Else
Form1.Label2.BackColor = &H5234&
End If
End IfIf p.vkCode = &HAC Then
If wParam = 256 Then
Form1.Label2.BackColor = &HFF&
Else
Form1.Label2.BackColor = &H5234&
End If
blnHook = True
End IfCase Else'do nothingEnd SelectEnd IfIf blnHook ThenLowLevelKeyboardProc = 1ElseCall CallNextHookEx(WH_KEYBOARD_LL, nCode, wParam, lParam)End IfEnd FunctionPublic Sub HooK()lngHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0)End SubPublic Sub UnHooK()Call UnhookWindowsHookEx(lngHook)End SubFORM1中代码:
Private Sub Form_Load()
HooK
End SubPrivate Sub Form_Unload(Cancel As Integer)
UnHooK
End Sub