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 ""这句代码该怎么写?
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 ""这句代码该怎么写?
改为:
If (GetKeyState(VK_MENU) And &HF0000000) <> 0 and mymsg.vKey = 96 Then MsgBox ""
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看看.
经过测试,在窗体获得焦点的时候可用,但是窗口最小化或者hide时,无相应,而且print的时候会出现3行,不知道为啥