hook?

解决方案 »

  1.   

    它是截取系统和应用程序之间的消息的函数,有点像DOS下的中断拦截
      

  2.   

    钩子就是 acqy(Just Programmer)所说的那样。
    可以拦截消息和函数做自己的处理。
    一般都要用到SetWindowsHookEx这个API。例如拦截一个消息
    {the prototype for the new keyboard hook function}
      function KeyboardHook(nCode: Integer; wParam: WPARAM;
                            lParam: LPARAM): LResult; stdcall;var
      Form1: TForm1;
      WinHook: HHOOK;     // a handle to the keyboard hook functionimplementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    begin  {install the keyboard hook function into the keyboard hook chain}
      WinHook:=SetWindowsHookEx(WH_KEYBOARD, @KeyboardHook, 0, GetCurrentThreadID);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      {remove the keyboard hook function from the keyboard hook chain}
      UnhookWindowsHookEx(WinHook);
    end;function KeyboardHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LResult;begin
      {if we can process the hook information...}
      if (nCode>-1) then
        {...was the TAB key pressed?}
        if (wParam=VK_TAB) then
        begin
          {if so, output a beep sound}
          MessageBeep(0);      {indicate that the message was processed}
          Result := 1;
        end
        else
        {...was the RETURN key pressed?}    if (wParam=VK_RETURN) then
        begin
          {if so, and if the key is on the up stroke, cause
           the focus to move to the next control}
          if ((lParam shr 31)=1) then
             Form1.Perform(WM_NEXTDLGCTL, 0, 0);      {indicate that the message was processed}
          Result := 1;
        end
        else
          {otherwise, indicate that the message was not processed.}      Result := 0
      else
        {we must pass the hook information to the next hook in the chain}
        Result := CallNextHookEx(WinHook, nCode, wParam, lParam);
    end;