如何攔截鍵盤輸入
發表于:2007-07-14來源:作者:點擊數:
標簽:
這是使用Keyboard Hook 的范例,它的解釋請查 VB 5 Call WinAPI技巧或Hook的簡介 '以下在.Bas Option Explicit Declare Function Set Windows HookEx Lib user32 Alias SetWindowsHookExA (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, B
這是使用Keyboard Hook 的范例,它的解釋請查
VB5 Call WinAPI技巧或Hook的簡介
'以下在.Bas
Option Explicit
Declare Function Set
WindowsHookEx 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便吃掉這個信息
De
bug.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
原文轉自:http://www.anti-gravitydesign.com