首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

hook WM_CALLWNDPROC 后回调函数使用有关问题

2012-02-29 
hook WM_CALLWNDPROC 后回调函数使用问题我用下了个hook拦截WM_CALLWNDPROC消息,如果有新窗口创建的话,调

hook WM_CALLWNDPROC 后回调函数使用问题
我用下了个hook拦截WM_CALLWNDPROC消息,如果有新窗口创建的话,调用exe里面的一个回调参数,把新窗口的句柄传回exe中,并对新窗口进行操作,可是老会出现读取0x000000000的错误,各位大虾能不能告诉我到底怎么回事。感激不尽。

下面是部分代码;

//消息过滤函数

function CallWndProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
var winStruct: TCWPStruct;
  wintitle:array[0..255] of char;
begin
  winStruct := PCWPSTRUCT(LParam)^;
  if nCode >= 0 then
  begin
  if winStruct.message = WM_CREATE then
  begin
  if getwindowtext(winStruct.hwnd,@wintitle,255)<>0 then
  begin
  cbfunc(winStruct.hwnd);//这个是回调函数,想用他传当前窗体的句柄给exe
  end;
  end;
  end;
  Result:= CallNextHookEx(0, nCode, WParam, LParam);
end;

//下钩子
procedure StartHook(cbfun:Tcbfunc); stdcall;
begin
  if PShare^.HookHandle = 0 then
  begin
  cbfunc:=cbfun;
  PShare^.HookHandle := SetWindowsHookEx(WH_CALLWNDPROC, PShare^.HookProc, HInstance, 0);
  end;
end;

[解决办法]
你的exe所在的进程创建一个线程,等待一个pipe,钩子例程中向这个pipe发送数据

热点排行