全局Hook无效的问题

eagleldj 2002-11-12 04:39:04
我在dll模块的sethook函数里调用
hCallWndHook := SetWindowsHookEx(WH_CALLWNDPROC,@CallWndProc,hInstance,0);

callwndproc函数(在Dll中):
function CallWndProc(nCode: Integer;WParam: WPARAM; LParam: LPARAM): LRESULT;stdcall;
var
cwpSturcts: PCWPSTRUCT;
begin
if nCode = HC_ACTION then
begin
// Process the hook if the Veneto window handle is valid
if hWin<> 0 then //hWin是我的主程序的主窗口的句柄,由主程序传给Dll
begin
cwpSturcts := PCWPSTRUCT(lParam);

//其他一些处理..........

//UpdateRectMessage是自定义的消息,由主程序传给Dll
PostMessage(hWin, UpdateRectMessage, wParam, lParam);
end;
end;
CallWndProc := CallNextHookEx(hCallWndHook, nCode, wParam, lParam);
end;

在主程序中替换主窗口的消息处理过程(WindowProc)为MyWindowProc
procedure TForm1.MyWindowProc(var msg : TMessage);
begin
//result := 0;
if msg.Msg = UpdateRectMessage then
begin
//处理...........

end;
WndProc(msg);
end;

现在发现只能截到本进程的消息,其它进程的消息似乎无法截取,各位大虾看看我到底哪里不对了?

...全文
118 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
eagleldj 2002-11-15
  • 打赏
  • 举报
回复
to wisenowa(127.0.0.1):
谢谢你!
我知道问题出在哪了。正如你所说,是Dll的全局变量的问题。
给分!
wisenowa 2002-11-14
  • 打赏
  • 举报
回复
看了看你的代码
按你所说你的beep应该是在if hWin<> 0 then 条件里面

而你的这个条件不会成立的,因为hWin在回调函数中始终为0,
所以就执行不到beep了。只要把Beep放到这个条件外面应该就可以了。

照此看来,你的钩子并不是没有起作用,而是因为(hWin = 0)为True。
再看看我为你提供的那个贴子吧。

eagleldj 2002-11-14
  • 打赏
  • 举报
回复
怎么这么久没人回答?
eagleldj 2002-11-14
  • 打赏
  • 举报
回复
to wisenowa(127.0.0.1):
首先谢谢你的帮忙。
我试过在if hWin<> 0 then处设立断点,而主程序中调用setwindowshook后就最小化,调用的刹那会跳到此断点(很多次),但程序最小化后无论别的窗口怎么变化,程序都不会跳到这个断点上来,出现这种情况应该是无法hook到其它进程的消息吧?不知道你有没别的解释?
再次谢谢你!
eagleldj 2002-11-13
  • 打赏
  • 举报
回复
to wisenowa(127.0.0.1):
我的问题好像和那个帖子有点不同,我用Beep调试(在Postmessage后加一句Windows.beep)发现主要是无法截取全局消息。
wisenowa 2002-11-13
  • 打赏
  • 举报
回复
你的问题与此贴一样,看看吧。
http://expert.csdn.net/Expert/topic/1153/1153617.xml?temp=.7391474
eagleldj 2002-11-12
  • 打赏
  • 举报
回复
to naughtyboy() :
在callwndproc函数截到消息后只要hWin<> 0 就往主程序发一个UpdateRectMessage消息。传递其他程序的句柄,不知道你指的是什么?
naughtyboy 2002-11-12
  • 打赏
  • 举报
回复
你处理的窗口句柄只有你自己应用程序的
而并没有传递其他程序的句柄

1,183

社区成员

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

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