+ -
当前位置:首页 → 问答吧 → 一个钩子程序问题的困惑

一个钩子程序问题的困惑

时间:2011-11-09

来源:互联网

请教各位大侠:
  最近刚在学HOOK,遇到一个问题,钩子程序代码如下,使用WH_CBT钩子,作用是在获取到窗口HCBT_DESTROYWND的消息后将发送消息给自己的主程序,主程序将判断此HCBT_DESTROYWND消息是否为一个特定的应用软件程序,如果是的话则主程序也关闭,遇到如下问题:
1、只有在任务栏上的程序图标上右键选关闭,才能触发HCBT_DESTROYWND,但MSDN上称HCBT_DESTROYWND消息是在窗口被销毁时触发,理论上使用任何方式关闭窗口都可以触发
2、其它程序用右键关闭后,未及时获取到HCBT_DESTROYWND消息,只有在任务栏上用右键关闭主程序时才能收到之前关闭程序的HCBT_DESTROYWND消息

不知问题出在哪里?抑或我的理解有问题?请给予帮助

function ShellHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  if nCode<0 then
  Result := CallNextHookEx(sHook, nCode, wParam, LParam);
  if nCode=HCBT_DESTROYWND then
  begin
  info:=Format('%d',[nCode]);
  PostMessage(MainWindowHwnd, WM_MyShellMessage, 0, Integer(PChar(info)));
  end;
  Result := CallNextHookEx(sHook, nCode, wParam, lParam);
end;

作者: blue_china   发布时间: 2011-11-09

function ShellHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  if nCode<0 then
  begin
  Result := CallNextHookEx(sHook, nCode, wParam, LParam);
  exit;
  end;
  if nCode=HCBT_DESTROYWND then
  begin
  info:=Format('%d',[nCode]);
  PostMessage(MainWindowHwnd, WM_MyShellMessage, 0, Integer(PChar(info)));
  end;
  Result := CallNextHookEx(sHook, nCode, wParam, lParam);
end;

另外,用postMessage真的能传字符串吗?应当用SendMessage + WM_COPYDATA吧?

作者: s11ss   发布时间: 2011-11-10

哦,info是全局的...

作者: s11ss   发布时间: 2011-11-10

热门下载

更多