对HOOK很掌握的高手进来。(300分)

  • 主题发起人 主题发起人 hikehilter
  • 开始时间 开始时间
H

hikehilter

Unregistered / Unconfirmed
GUEST, unregistred user!
我想通过CBTPROC来捕捉系统的创建事件。但每次打开一个窗口,都会有很多生成的句柄出来,
我想只关闭最上面的父窗体,但这个过程好像有问题,一运行就死,那位给点主意,这个函数
是在我的DLL里面的 。
//CBTProc process Function.
function CBT_HookProc(nCode: Integer; WPARAM: wParam; LPARAM: lParam): LResult; stdcall;
var
TempHwnd:integer;
begin
if nCode =HCBT_CREATEWND then begin
if rHookRec^.MainWindow <> 0 then
begin
SendMessage(rHookRec^.MainWindow, MSG_CBT, WPARAM,LParam);
TempHwnd:=wParam;
While GetParent(TempHwnd)>0 do
TempHwnd:=GetParent(TempHwnd);
if Getparent(TempHwnd)<>rHookRec^.MainWindow then
begin
Result:=1;
Exit;
end else
result := CallNextHookEx(rHookRec^.HookID, nCode, wParam, lParam);
end;
end;
end;
 
我没试过你的代码,不过以前作过类似的。直接改了一下,你试试:
function CBT_HookProc(nCode: Integer; WPARAM: wParam; LPARAM: lParam): LResult; stdcall;
begin
if nCode =HCBT_CREATEWND then
begin
if rHookRec^.MainWindow <> 0 then
begin
SendMessage(rHookRec^.MainWindow, MSG_CBT, WPARAM,LParam);
if (CBT_CREATEWND(pointer(lparam)^).lpcs^.hwndParent=0)
and CBT_CREATEWND(pointer(lparam)^).lpcs^.hwndParent<>rHookRec^.MainWindow) then
Result:=1;
end;
end;
end;
 
我的QQ:21276197
我的MAIL:hike@gnhotel.com
可否联系一下?
 
都不错的
和我联系把
qq28062283
si_dg@sina.com
 
接受答案了.
 

Similar threads

I
回复
0
查看
631
import
I
I
回复
0
查看
622
import
I
后退
顶部