无界面程序创建的钩子不能发消息给创建他的线程!

an_bachelor 2003-10-20 08:19:34
一个无界面(没有窗口)win32工程创建一个全局键盘钩子之后进入消息循环,目的是希望当某一特定键被按下时主线程退出。本来打算监测到特定的按键时发给主线程一条WM_QUIT消息(主线程的ID预先传给了钩子所在dll的一个全局变量),结果发现钩子执行
PostThreadMessage(idMain,WM_QUIT,NULL,NULL);//idMain为主线程ID
这个ID绝对是主线程的,但发消息就是不成功
时就挂起了后来发现只要是在这个dll中的全局变量钩子都访问不了,访问就挂起。
但是,假如主线程是有窗口的,就一切正常了
欢迎大家讨论、试验和赐教。
...全文
28 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
photoman 2003-10-24
  • 打赏
  • 举报
回复
如果你没有窗口,那 DispatchMessage 函数就没法正确分发消息
你只能用thread-specific hook来捕获消息了
an_bachelor 2003-10-24
  • 打赏
  • 举报
回复
可是我的是一个win32工程没有用mfc的主消息循环是
BOOL nMessage;
while( (nMessage = GetMetssage()) != -1 ) {
...
}
photoman 2003-10-22
  • 打赏
  • 举报
回复
这是MFC得一个bug,当你在没有主窗体得时候
你就不能用ON_MESSAGE宏来关联消息函数
此时必须重栽PreTranslateMessage函数来手工分发消息
在MFC7.0中是没有这个问题得
an_bachelor 2003-10-22
  • 打赏
  • 举报
回复
肯定有一个消息循环!
scatzr 2003-10-21
  • 打赏
  • 举报
回复
win32工程中有没有消息循环?
窗口过程?

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧