问题:子线程中安装全局键盘钩子出现异常,主线程中安装一切正常说明:全钩子在dll中安装,在主线程里调用,功能正常。但如果创建子线程,在子线程里加载dll并安装钩子,发现:只能导致按键缓慢,却并不能拦截键盘消息。奇怪:经跟踪,钩子安装是成功的,但相应消息无法在DLL里的相应KeyboardProc里截获。凑合:可以在子线程里发送消息到主线程,然后在主线程里安装钩子。虽然可以解决,但不是我的本意。我想实现在子线程里成功安装钩子。类似:有些其他功能,比如MCI系列函数,在子线程里也会出现些异常,比如无法获取音乐长度等。为何子线程里会出现这些奇怪的问题呢?又应该如何解决呢?

解决方案 »

  1.   

    我提供些小线索:
    · 回调函数是 __stdcall 没?
    · 如果链接了CRT,是用_beginthreadex创建的线程没?
    这两个错误我都犯过。
      

  2.   

    to xhjbeidoulong:这两个问题我都注意过并解决了的。
    to eduyu:是__stdcall,并使用了线程池函数。谢谢两位关注,再放几天,实在不行,也只能结掉了。
      

  3.   

    子线程没有结束。大家可以开个线程试一下:会发现在子线程里无法安装HOOK。
      

  4.   

    请参看此页http://blog.csdn.net/Slin000/article/details/4139326关键代码如下
    MSG msg; while(GetMessage(&msg, NULL, 0, 0))    {             TranslateMessage(&msg);      DispatchMessage(&msg);    }