首先,全局钩子是成功的:
myHookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyFun, App.hInstance, 0)
-------------------然后是我的线程钩子:
Dim MainHwnd As Long, pId As Long, hInst As LongMainHwnd = GetForegroundWindow&
pId = GetWindowThreadProcessId(MainHwnd, hInst)
myHookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyFun, App.hInstance, pId)在最后一行设断点,显示myHookproc有返回值,应该算是安装成功的,但这个时候,切换到目标进程,比如说notepad.exe,然后随便按个什么键,却弹出错误窗口,随后目标程序崩溃,我的程序尚好。这是我的钩子处理程序,为了简单起见,其实我就没做任何处理:
Public Function MyFun(ByVal iCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long MyFun= CallNextHookEx(myHookproc, iCode, wParam, lParam)
End Function
myHookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyFun, App.hInstance, 0)
-------------------然后是我的线程钩子:
Dim MainHwnd As Long, pId As Long, hInst As LongMainHwnd = GetForegroundWindow&
pId = GetWindowThreadProcessId(MainHwnd, hInst)
myHookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyFun, App.hInstance, pId)在最后一行设断点,显示myHookproc有返回值,应该算是安装成功的,但这个时候,切换到目标进程,比如说notepad.exe,然后随便按个什么键,却弹出错误窗口,随后目标程序崩溃,我的程序尚好。这是我的钩子处理程序,为了简单起见,其实我就没做任何处理:
Public Function MyFun(ByVal iCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long MyFun= CallNextHookEx(myHookproc, iCode, wParam, lParam)
End Function
貌似SetWindowsHookEx的最后一个必须填写为App.ThreadID
不对, 那样就成为一个本地钩子了, 即只能钩自己的消息, 现在我做的是线程外钩子啊!