这个钩子怎么做呀 ( 积分: 200 )

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

liangzhang3942

Unregistered / Unconfirmed
GUEST, unregistred user!
我想拦截一个外部程序的WM_NCPaint消息,并且使其不能向下传递,而这个消息每搁几十秒就来,这个钩子怎么做呀,谢谢
 
用WH_CBT 和WH_CALLWNDPROC 这两种钩子好象都可以
 
给个例子好吗老大
 
//窗口过程钩子回调函数
function HookProc(icode:Integer;wparam:WPARAM;lparam:LPARAM):LRESULT;stdcall;
var
P:TCWPStruct;
begin
Result := 0 ;
if icode <0 then
Result := CallNextHookEx(WinProcHook,icode,wparam,lparam)
else
begin
p:= PCWPStruct(lparam)^;
if P.message = WM_NCPaint then
begin
{你要做的处理}
Result:= 1;
end;
end;
end;

procedure InstallHook;
begin
WinProcHook:= SetWindowsHookEx(WH_CALLWNDPROC,@HookProc,Hinstance,dwThreadID);
end;
procedure UnInstallHook;
begin
UnHookWindowsHookEx(WinProcHook)
end;
 
用上面的方法 我试过可以截获WM_NCPAINT,但是还能阻止继续传递下去. 就是不能屏蔽掉. 不知道为什么. 我用过替换窗口过程的方法,有时候能截获掉 ,边框没有画出来. 但有时候又不行了
 
谢谢,我试试
 
好像不行呀
 
处理完后把消息清空就行了:
PMsg(LPARAM)^.Message := WM_NULL;
PMsg(LPARAM)^.WParam := 0;
PMsg(LPARAM)^.LParam := 0;
 
我试试,行了立刻给份
 
不行呀老大,
 
就是不行 ,替换窗口过程可以截获,但有时后又出来了
 
那怎么办呀
 
有一个控件可以吗
 
后退
顶部