问题:子线程中安装全局键盘钩子出现异常,主线程中安装一切正常说明:全钩子在dll中安装,在主线程里调用,功能正常。但如果创建子线程,在子线程里加载dll并安装钩子,发现:只能导致按键缓慢,却并不能拦截键盘消息。奇怪:经跟踪,钩子安装是成功的,但相应消息无法在DLL里的相应KeyboardProc里截获。凑合:可以在子线程里发送消息到主线程,然后在主线程里安装钩子。虽然可以解决,但不是我的本意。我想实现在子线程里成功安装钩子。类似:有些其他功能,比如MCI系列函数,在子线程里也会出现些异常,比如无法获取音乐长度等。为何子线程里会出现这些奇怪的问题呢?又应该如何解决呢?
· 回调函数是 __stdcall 没?
· 如果链接了CRT,是用_beginthreadex创建的线程没?
这两个错误我都犯过。
to eduyu:是__stdcall,并使用了线程池函数。谢谢两位关注,再放几天,实在不行,也只能结掉了。
MSG msg; while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }