我想做个当有键盘按下时“隐藏光标”而当鼠标移动时“显示光标”的小Hook。
Dll的代码如下:
library ShowHide;
uses
  windows,
  messages;{$R *.res}
var
  HookCount:integer;
  KeyboardHookHWND,MouseHookHWND: HHook; //Hook类型
//********************************************************************
function KeyboardHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall;
const
  _KeyPressMask = $80000000; 
var
  ShowNum:Integer;
begin   
  if (lParam and _KeyPressMask)=0 Then
  begin
    Result := CallNextHookEx(KeyboardHookHWND, iCode, wParam, lParam);
    Exit;
  end;
  ShowNum:=ShowCursor(false);
  while ShowNum>=0 do
    ShowNum:=ShowCursor(false);
  Result:=CallNextHookEx(KeyboardHookHWND, iCode, wParam, lParam);
end;
//********************************************************************
function MouseHookProc(iCode:Integer;wParam:wParam;lParam:lParam):LRESULT;stdcall;
var
  ShowNum:Integer;
begin              
  if iCode<0 then
    begin
      Result := CallNextHookEx(MouseHookHWND,iCode,wParam,lParam);
      exit;
    end;
  ShowNum:=showcursor(true);
  while ShowNum<0 do
    ShowNum:=ShowCursor(true);
  result:=CallNextHookEx(MouseHookHWND,iCode,wParam,lParam);
end;
//********************************************************************
function EnableShowHideHook: BOOL;stdcall;export;
begin
  Result:=true;      // 挂上钩子并保留返回值形成钩子环(Hook Loop)
  if HookCount=1 then exit;
  if HookCount=0 then
    begin
      KeyboardHookHWND:=SetWindowsHookEx(WH_KEYBOARD,@KeyboardHookHandler,HInstance,0);
      MouseHookHWND:=SetwindowsHookEx(WH_MOUSE,@MouseHookProc,HInstance,0);
      if (MouseHookHWND<>0)and(KeyboardHookHWND<>0) then inc(HookCount)
      else result:=false;
    end;
end;
//***********************************************************************************
function DisableShowHideHook: BOOL;stdcall;export;
begin
  result:=false;
  if HookCount=0 then exit;
  Result := true;
  dec(HookCount);
  if HookCount = 0 then
    begin
      UnhookWindowshookEx(KeyboardHookHWND); // 解除键盘钩子
      UnHookWindowsHookEx(MouseHookHWND); // 解除鼠标钩子
    end;
  end;
end;exports
  EnableShowHideHook,
  DisableShowHideHook;
  
begin
  KeyboardHookHWND:=0;
  MouseHookHWND:=0;
  HookCount:=0;
end.1.测试时用一个“按钮”调用EnableShowHideHook时可以实现效果!但是用另一个“按钮”调用DisableShowHideHook却不能卸载勾子。只有测试程序退出了勾子才自动卸载,不知道是怎么回事!2.在对文件进行重命名操作时,鼠标指针会一闪一闪的。不知道是怎么回事?在文本文件里进行输入则没有这种现象的。望高手指点!!