klavyeli versiyonu
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Type
KeybdLLHookStruct = record
vkCode : cardinal;
scanCode : cardinal;
flags : cardinal;
time : cardinal;
dwExtraInfo : cardinal;
end;
MouseLLHookStruct = record
pt : TPoint;
mouseData : cardinal;
flags : cardinal;
time : cardinal;
dwExtraInfo : cardinal;
end;
var
mHook : cardinal;
kHook : cardinal;
function LowLevelKeybdHookProc(nCode, wParam, lParam : integer) : integer; stdcall;
// possible wParam values: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP
var
info : ^KeybdLLHookStruct absolute lParam;
lpChar : word;
kState : TKeyboardState;
begin
result := CallNextHookEx(kHook, nCode, wParam, lParam);
with info^ do
case wParam of
wm_keydown : begin
GetKeyboardState(kState);
if ToAscii(vkCode, scanCode, kState, @lpChar, 0) > 0 then Form1.Memo2.Lines.Append(format('pressed key -- %s', [char(lpChar)]));
end;
end;
end;
function LowLevelMouseHookProc(nCode, wParam, lParam : integer) : integer; stdcall;
// possible wParam values: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN, WM_RBUTTONUP
var
info : ^MouseLLHookStruct absolute lParam;
begin
result := CallNextHookEx(mHook, nCode, wParam, lParam);
with info^ do
case wParam of
wm_lbuttondown : Form1.Memo1.Lines.Append(format('pressed left button (%d, %d)' , [pt.x, pt.y]));
wm_lbuttonup : Form1.Memo1.Lines.Append(format('released left button (%d, %d)' , [pt.x, pt.y]));
wm_mbuttondown : Form1.Memo1.Lines.Append(format('pressed middle button (%d, %d)' , [pt.x, pt.y]));
wm_mbuttonup : Form1.Memo1.Lines.Append(format('released middle button (%d, %d)' , [pt.x, pt.y]));
wm_rbuttondown : Form1.Memo1.Lines.Append(format('pressed right button (%d, %d)' , [pt.x, pt.y]));
wm_rbuttonup : Form1.Memo1.Lines.Append(format('released right button (%d, %d)' , [pt.x, pt.y]));
wm_mousewheel : begin
if smallInt(mouseData shr 16) > 0
then Form1.Memo1.Lines.Append('scrolled wheel (up)')
else Form1.Memo1.Lines.Append('scrolled wheel (down)');
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
const
wh_keybd_ll = 13;
wh_mouse_ll = 14;
begin
kHook := SetWindowsHookEx(wh_keybd_ll, @LowLevelKeybdHookProc, hInstance, 0);
mHook := SetWindowsHookEx(wh_mouse_ll, @LowLevelMouseHookProc, hInstance, 0);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnhookWindowsHookEx(kHook);
UnhookWindowsHookEx(mHook);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
form1.caption:='0';
end;
end.

