首先,全局钩子是成功的:
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

解决方案 »

  1.   

    貌似SetWindowsHookEx的最后一个必须填写为App.ThreadID
      

  2.   

    pheonixdie(凤凰涅磐) ( ) 信誉:100  2006-6-18 23:00:07  得分: 0  
    貌似SetWindowsHookEx的最后一个必须填写为App.ThreadID
     不对, 那样就成为一个本地钩子了, 即只能钩自己的消息, 现在我做的是线程外钩子啊!
      

  3.   

    全局HOOK这么简单的话,VB和VC还有什么区别? MyFun是你自己进程里的地址,其他程序有自己的代码空间,你这么传个地址过去,天知道在对方的空间里是什么地方,对方不死翘翘才怪,你当然没事情,因为你的地址里是一个正常的函数入口。
      

  4.   

    算了经过无数次试验,注定是整不成了,放弃了,也许正如province_(雍昊) 所说,这就是VB和VC的区别。。