Win32如何过滤消息

overbill 2008-11-24 03:09:03
win32创建的Dll文件,内部一个独立线程,目标是截获所有的系统消息:
unsigned long __cdecl MyControllingFunction( LPVOID pParam )
{
MSG msg;
while (GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

问题是:
1.如何过滤消息,实现诸如WndProc(),或者MFC中的Cxx:Pretranslatemessage(),这样的功能??
2.外部独立的线程是否能够收到所有的系统消息,如WM_ACTIVED?会不会连窗口内部的消息也收到,如WM_PAINT? 点击鼠标WM_LBUTTONUP之类的消息,如何在点击窗口时也能被外部线程收到??
...全文
163 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
overbill 2008-11-25
  • 打赏
  • 举报
回复
一个程序切换到前台,是什么消息?此外我还要接收几个自定义消息
lzg0001 2008-11-25
  • 打赏
  • 举报
回复
MSG msg;
while (GetMessage(&msg, 0, 0, 0))
{
switch((int)(msg.message))
{
...
}
}

线程没有窗口就不要调用 TranslateMessage、 DispatchMessage 了,收到的消息也不会有窗口消息!

对于无窗口线程,其消息循环基本上都是自定义消息。

GetMessage 时消息就从消息队列移出来了 ,你只要作出处理就行了!
Gavin001 2008-11-25
  • 打赏
  • 举报
回复
用消息钩子
overbill 2008-11-24
  • 打赏
  • 举报
回复
由于本程序是DLL中的线程,没有窗口界面,::DefWindowProc(...)能用吗???
lzg0001 2008-11-24
  • 打赏
  • 举报
回复

MSG msg;
while (GetMessage(&msg, 0, 0, 0))
{
if( ... msg.hwnd ... msg.message ...)
{
return ::DefWindowProc(...);
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
etz2008 2008-11-24
  • 打赏
  • 举报
回复
你可以用钩子函数实现

安装钩子类型很多

你需要截获什么消息你安装什么钩子就可以

15,466

社区成员

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

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