level 13
所谓hook...
就只是声明了3个API(setwindowshook,unhookwindowshook,callnexthook),然后有一个CallHook过程,它的使用仅此而已....
在开始hook的时候,setwindowshookEx(你要hook的东西类型(比如你要hook鼠标移动,就是WM_MOUSEMOVE), AddressOf 你的Hook处理过程(这个过程的最后面最好要callnexthook), App.hInstance, 0)
当不需要hook时就call unhookwindowshook(setwindowshook的返回值(一般都是用一个变量来保存这个钩子的句柄的))
综合以上所述,代码大概就是如此:
'某Module
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private 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
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As LongPrivate hHook as long
Public Sub AddHook()
hHook = SetWindowsHookEx(被hook消息的类型, AddressOf CallHook, App.hInstance, 0)
End Sub
Public Sub DelHook()
Call UnhookWindowsHookEx(hHook)
End Sub
Private Function CallHook(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'你在钩到消息时要做的事
CallHook = CallNextHookEx(iHook, nCode, wParam, lParam)
End IfEnd Function
'某Form
Sub form_load
addhook
end sub
sub form_unload(cancel as integer)
delhook
end sub
2012年10月13日 15点10分
2
额,在模块的代码里加一句Private hHook as long
2012年10月13日 15点10分
回复 9965955 :好人啊!谢了!
2012年10月13日 15点10分
回复 9965955 :能不能给个例子:点击按钮后,F键不起作用,点另一个按钮后,F键又有用了,只要一个基础的例子好学习学习
(摇滚)
2012年10月13日 15点10分