2007-10-25 23:57:04
Kenny
如何攔截鍵盤輸入
來源:cww 這是使用Keyboard Hook 的範例,它的解釋請查VB5 Call WinAPI技巧 或Hook的簡介
'以下在.Bas Option Explicit 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 hnexthookproc As Long Public Const HC_ACTION = 0 Public Const WH_KEYBOARD = 2 Public Sub UnHookKBD() If hnexthookproc <> 0 Then UnhookWindowsHookEx hnexthookproc hnexthookproc = 0 End If End Sub Public Function EnableKBDHook() If hnexthookproc <> 0 Then Exit Function End If hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _ MyKBHFunc, App.hInstance, 0) If hnexthookproc <> 0 Then EnableKBDHook = hnexthookproc End If End Function Public Function MyKBHFunc(ByVal iCode As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long '這三個參數是固定的,不能動,而MyKBHFunc這個名稱只要和 'SetWindowsHookex()中 AddressOf後的名稱一樣便可,不一定叫什麼 'wParam 是傳入按了哪個key的virtual-key code '如果您將以下的兩行unmark則所有鍵盤的輸入皆沒有作用 'MyKBHFunc = 1 '吃掉訊息 'Exit Function MyKBHFunc = 0 '訊息要處理 If iCode < 0 Then MyKBHFunc = CallNextHookEx(hnexthookproc, iCode, wParam, lParam) Exit Function End If If wParam = vbKeySnapshot Then '偵測 有沒有按到PrintScreen鍵 MyKBHFunc = 1 '在這個Hook便吃掉這個訊息 Debug.Print "haha" Else Call CallNextHookEx(hnexthookproc, iCode, wParam, lParam) End If End Function '以下在Form Private Sub Form_Load() Call EnableKBDHook End Sub Private Sub Form_Unload(Cancel As Integer) Call UnHookKBD End Sub |
上一篇:SCRIPT . RUNAS