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.