已知窗口的句柄怎样拦截该窗口的消息?

fastcall 2003-07-02 11:08:19
已知窗口的句柄怎样拦截该窗口的消息?
...全文
260 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Siney 2003-07-07
  • 打赏
  • 举报
回复
如果在同一进程,可以SetWindowlong(handle,GWL_WNDPROCE,....)改变窗台消息处理函数,如果不在,就需要创建dll,然后注入其进程地址空间,然后同样使用上面的方法。

----------------------------------
感谢您选用Borland产品,更多信息请前往Borland社区和新闻组查询:.......
ybluo 2003-07-06
  • 打赏
  • 举报
回复
如果是其他进程的窗体,必须先把代码插入其他进程,可以用HOOK
叶子哟 2003-07-05
  • 打赏
  • 举报
回复
用TApplicationEvent也行呀
binbin 2003-07-05
  • 打赏
  • 举报
回复
要看这个窗口的具体情况了,如果窗口是另一个程序的,那么上面的方法肯定是不行的.用Hook就可以.因为跨进程的内存完全隔离,窗口过程是无效的,除非你想办法注入代码.
nightfallrove 2003-07-05
  • 打赏
  • 举报
回复
楼上的办法简单.......
kingcaiyao 2003-07-02
  • 打赏
  • 举报
回复
不用做钩子这么麻烦
既然已知窗口句柄,你可以设置这个窗口的窗口处理过程,which goes like this:

void __fastcall TForm1::NewProc(TMessag e &Message)
{
switch (Msg.Msg)
{
case WM_ERASEBKGND:
case WM_MOUSEMOVE:
case WM_LBUTTONDOWN:
case WM_DROPDWON:
}

}
void *OldProc;
void SaveOldWindowProc(HWND hWnd)
{
/First of all,save the old windowproc pointer;
OldProc=::GetWindowLong(hWnd,GWL_WNDPROC);
//Set the new windowproc to process the message
}
void SetNewWindowProc(HWND hWnd)
{
void *ObjectInstance=::MakeObjectInstance(NewProc)
::SetWindowLong(hWnd,GWL_WNDPROC,(long)ObjectInstance);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{

SaveOldWindowProc(ComboBox1->Handle);
SetNewWindowProc(ComboBox1->Handle);
}
fastcall 2003-07-02
  • 打赏
  • 举报
回复
需要这么复杂吗?我只是想处理一下TComboBox的鼠标事件
nightfallrove 2003-07-02
  • 打赏
  • 举报
回复
用钩子,
先得到该窗口所在进程的进程号,
然后HOOK

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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