本帖最后由 goodboy_ttp2011 于 2011-12-10 20:28:56 编辑

解决方案 »

  1.   


    我试过HOOK啊,只能捕获普通的按键消息。多媒体键就捕获不到。能给个详细代码吗,谢谢!
      

  2.   

    小弟刚刚开始学习VB,对HOOK的应用不是很熟悉。在网上找了一些HOOK的用法,试了下还是不行。
      

  3.   

    问题的关键在于搞清楚这些多媒体按键的Code是什么。
      

  4.   

    这里面有多媒体编码,你HOOK他们即可
      

  5.   


    不知道怎么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
      

  6.   

    http://download.csdn.net/detail/veron_04/3400339