关于全局钩子 ( 积分: 50 )

  • 主题发起人 主题发起人 linzhengqqun
  • 开始时间 开始时间
L

linzhengqqun

Unregistered / Unconfirmed
GUEST, unregistred user!
我的全局钩子安装在DLL中,但奇怪的是,安装成功之后,竟然不是全局的,只是当前线程的。
很不解,请高手告知,全局到底要注意些什么。
下面是重要的代码:
-----------
DLL工程文件:
exports
StartSpyMessage,
StopSpyMessage;
。。。。。
-----------
DLL的单元文件:
。。。。
function StartSpyMessage(AHWndSpy: THandle; AMsgInfoProc: Pointer): Boolean; stdcall;
begin
Result := False;
try
if HWndSpy <> 0 then Exit;
HWndSpy := AHWndSpy;
MsgInfoProc := TMsgInfoProc(AMsgInfoProc);
HMsgProc := SetWindowsHookEx(WH_GETMESSAGE, @GetMsgProc, HInstance, 0);
HWndProc := SetWindowsHookEx(WH_CALLWNDPROC, @CallWndProc, HInstance, 0);
HWndRetProc := SetWindowsHookEx(WH_CALLWNDPROCRET, @CallWndRetProc, HInstance, 0);
if (HMsgProc = 0) or (HWndProc = 0) or (HWndRetProc = 0) then
Exit;
if HWndSpy = 0 then
Exit;
except
Exception.Create(err_ProcInvalid);
end;
Result := True;
end;

为什么这样安装上面几个消息钩子之后,却只能是纯程的呢,为什么不是全局的呢。
 
我的全局钩子安装在DLL中,但奇怪的是,安装成功之后,竟然不是全局的,只是当前线程的。
很不解,请高手告知,全局到底要注意些什么。
下面是重要的代码:
-----------
DLL工程文件:
exports
StartSpyMessage,
StopSpyMessage;
。。。。。
-----------
DLL的单元文件:
。。。。
function StartSpyMessage(AHWndSpy: THandle; AMsgInfoProc: Pointer): Boolean; stdcall;
begin
Result := False;
try
if HWndSpy <> 0 then Exit;
HWndSpy := AHWndSpy;
MsgInfoProc := TMsgInfoProc(AMsgInfoProc);
HMsgProc := SetWindowsHookEx(WH_GETMESSAGE, @GetMsgProc, HInstance, 0);
HWndProc := SetWindowsHookEx(WH_CALLWNDPROC, @CallWndProc, HInstance, 0);
HWndRetProc := SetWindowsHookEx(WH_CALLWNDPROCRET, @CallWndRetProc, HInstance, 0);
if (HMsgProc = 0) or (HWndProc = 0) or (HWndRetProc = 0) then
Exit;
if HWndSpy = 0 then
Exit;
except
Exception.Create(err_ProcInvalid);
end;
Result := True;
end;

为什么这样安装上面几个消息钩子之后,却只能是纯程的呢,为什么不是全局的呢。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部