Public Function MyKBHook(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If ncode = 0 Then
 If wParam = WM_KEYDOWN Then
CopyMemory mymsg, ByVal lParam, Len(mymsg)
If mymsg.vKey = 96 Then MsgBox ""
 End If
 End If
MyKBHook = CallNextHookEx(hHook, ncode, wParam, lParam)
End Function以上代码可实现当按下小键盘上0这个数字键后 跳出msgbox。现在请问各位老师,如果我要要求按下一个组合键,比如alt+0才出现msgbox,If mymsg.vKey = 96 Then MsgBox ""这句代码该怎么写?

解决方案 »

  1.   

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

  2.   

    If mymsg.vKey = 96 Then MsgBox ""
    改为:
    If (GetKeyState(VK_MENU) And &HF0000000) <> 0 and mymsg.vKey = 96 Then MsgBox ""
      

  3.   

    '以下代码在窗体中
    Private Sub Form_Load()
        'KPD-Team 2000
        'URL: http://www.allapi.net/
        'E-Mail: [email protected]
        'set a keyboard hook
        hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, App.hInstance, App.ThreadID)
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        'remove the windows-hook
        UnhookWindowsHookEx hHook
    End Sub
    '以下代码在一个标准模块中
    Public Const WH_KEYBOARD = 2
    Public Const VK_SHIFT = &H10
    Public Const VK_MENU As Long = &H12Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
    Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
    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
    Public hHook As LongPublic Function KeyboardProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        'if idHook is less than zero, no further processing is required
        If idHook < 0 Then
            'call the next hook
            KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
        Else
            'check if SHIFT-S is pressed
            If (GetKeyState(VK_MENU) And &HF0000000) <> 0 And wParam = Asc("S") Then
                'show the result
                Form1.Print "Alt+S pressed ..."
            End If
            'call the next hook
            KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
        End If
    End Function
    测试时在窗体获得焦点的情况下按Alt+S看看.
      

  4.   


    经过测试,在窗体获得焦点的时候可用,但是窗口最小化或者hide时,无相应,而且print的时候会出现3行,不知道为啥
      

  5.   

     hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, App.hInstance, App.ThreadID)想要全局的话就要挂全局HOOK,WH_KEYBOARD要改为WH_KEYBOARD_LL,声明自己去找吧.多次PRINT是因为按下,抬起这些消息在每次击键时都会产生.