一个单独的DLL,只能勾局部的,为什么不能勾全局?var
  hhk: HHOOK;function MsgHookProc(ACode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
  Msg: PMsg;
begin
  if ACode < 0 then
    Result := CallNextHookEx(hhk, ACode, wParam, lParam)
  else begin
    Msg := PMsg(lParam);
    OutputDebugString(PChar(IntToHex(Msg^.message, 8)));
    Result := CallNextHookEx(hhk, ACode, wParam, lParam);
  end;end;procedure InstallHook();
begin
  if hhk = 0 then
    hhk := SetWindowsHookEx(WH_GETMESSAGE, @MsgHookProc, HInstance, 0);
end;procedure UninstallHook();
begin
  if hhk <> 0 then
  begin
    UnhookWindowsHookEx(hhk);
    hhk := 0;
  end;
end;exports
  InstallHook,
  UninstallHook;

解决方案 »

  1.   

    勾勾一下。
    这种代码应该很多。
      

  2.   

    你所谓的勾全局是什么意思?想要什么效果?
      

  3.   

    勾的是全局,只不过你所看到调试信息只有被调试的这一个进程。
      

  4.   


    后来意识到这个问题,用发送消息的方式试了一下,还是不行。
      

  5.   

    发消息要注意的问题也很多,稍不注意就可能会出错。比较简单的方法是写文件,在收到某一特定消息(例如鼠标点击)时打开文件,追加数据,关闭文件。