const
  WM_TestMessage = WM_USER + 2000;
...
function TestHookProc(Code: Integer; WParam: Longint;Msg:Longint): Longint;stdcall;
begin
    if (Code = HC_ACTION) then
    if PMsg(Msg)^.Message = WM_TestMessage then
    begin
      showMessage('已经截获该消息');
    end;
    Result := CallNextHookEx(HookHandle, Code, WParam, Longint(@Msg));
end;
实在有些看不懂啊!
PMsg(Msg)^.Message 到底怎么理解啊!

解决方案 »

  1.   

    就是说进程截获的消息(MSG)的消息类型是WM_USER+2000,则................
    HOOK我也正在研究中
      

  2.   

    pmsg很明显是个指针吗。前面定义得仔细看看。最好贴出来。Pmsg^.message更说明是个结构指针,或者指针结构Msg就是下标,message就是成员。还是补好Object Pascal吧。这个很简单。就是截获HC_ACTION然后返回调用下一个Hook。
      

  3.   

    呵呵
    他的msg定义为longint不是tmsg,你要转化一下才能用
      

  4.   

    pmsg是以前定义的。你要结合上下文看。象他这样的应该可以字用热键来实现吧?请指点?
      

  5.   

    pmsg在windows.pas中有定义,
     PMsg = ^TMsg;
      tagMSG = packed record
        hwnd: HWND;
        message: UINT;
        wParam: WPARAM;
        lParam: LPARAM;
        time: DWORD;
        pt: TPoint;
      end;
      {$EXTERNALSYM tagMSG}
      TMsg = tagMSG;
      MSG = tagMSG;
    但 Code = HC_ACTION 和 Longint(@Msg) 具体怎么理解???钩子函数可以不判断Code = HC_ACTION而只通过PMsg(Msg)^.Message = WM_TestMessage 来进行自定义消息的截获吗?