www.pudn.com > 推箱子源码.rar > U_MouseHook.pas


unit U_MouseHook; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
  StdCtrls, U_Def; 
type 
  TF_MouseHook = class(TForm) 
    lblInfo: TLabel; 
    edtMInfo: TEdit; 
    btnHook: TButton; 
    procedure btnHookClick(Sender: TObject); 
    procedure FormCreate(Sender: TObject); 
    procedure FormClose(Sender: TObject; var Action: TCloseAction); 
  private 
    hMapObj: THandle; 
    pShMem: PShareMem; 
    ShareFlag: Boolean; 
    procedure WMMOUSEEX(var message: TMessage); message WM_MOUSEEX; 
  public 
    { Public declarations } 
  end; 
  function InstallMouseHook(hInst : LongWord) : Boolean; external 'HookMouse.dll'; 
  function UnWiseMouseHook : Boolean; external 'HookMouse.dll'; 
var 
  F_MouseHook: TF_MouseHook; 
implementation 
{$R *.DFM} 
 
procedure TF_MouseHook.btnHookClick(Sender: TObject); 
begin 
  InstallMouseHook(hInstance); 
  FlushViewOfFile(pShMem, 0); 
  ShareFlag := True; 
end; 
 
procedure TF_MouseHook.WMMOUSEEX(var message: TMessage); 
begin 
  if ShareFlag then 
  begin 
    case message.WParam of 
      WM_MOUSEMOVE   : begin 
                         edtMInfo.Text := 'X:' + IntToStr(pShMem^.pMouse.x) + 
                         ' ' + 'Y:' + IntToStr(pShMem^.pMouse.y) + '     '  + 
                         'HWND:0x' + IntToHex(pShMem^.hHookWnd, 8); 
                       end; 
      WM_LBUTTONDOWN : begin 
                         //单击了鼠标左键 
                       end; 
      WM_RBUTTONDOWN : begin 
                         //单击了鼠标右键 
                       end; 
    end; 
  end; 
end; 
 
procedure TF_MouseHook.FormCreate(Sender: TObject); 
begin 
  hMapObj := OpenFileMapping(FILE_MAP_WRITE, 
                             False, 
                             LPCTSTR(MappingFileName)); 
 
  pShMem := PShareMem( MapViewOfFile(hMapObj, 
                             FILE_MAP_WRITE, 
                             0, 0, 0) ); 
  if pShMem = nil then 
  begin 
    ShowMessage('Map File Mapping Failed! Error '+ IntToStr(GetLastError)); 
    CloseHandle(hMapObj); 
    Halt; 
  end; 
  FillChar(pShMem^, SizeOf(TShareMem), 0); 
  pShMem^.hProcWnd := Self.Handle; 
  FlushViewOfFile(pShMem, 0); 
end; 
 
procedure TF_MouseHook.FormClose(Sender: TObject; 
  var Action: TCloseAction); 
begin 
  UnWiseMouseHook; 
  UnMapViewOfFile(pShMem); 
  CloseHandle(hMapObj); 
  ShareFlag := False; 
end; 
 
end.