z tego co pamiętam to zakładąjac hook można uzyskać taką informację:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644970%28v=vs.85%29.aspx
flags.
Tak na szybko, rzeczywiście flags się zmienia, kod w Lazarusie
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Windows, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, LCLProc, StdCtrls;
const WH_MOUSE_LL = 14;
type
tagMSLLHOOKSTRUCT = record
pt: TPoint;
mouseData: DWord;
flags: DWord;
time: DWord;
dwExtraInfo: PDWord;
end;
TMSLLHOOKSTRUCT = tagMSLLHOOKSTRUCT;
PMSLLHOOKSTRUCT = ^TMSLLHOOKSTRUCT;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
procedure Button1Enter(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
private
public
end;
var
Form1: TForm1;
hhm: HHOOK;
implementation
{$R *.lfm}
function HookCallBack(nCode :Longint; awParam: WParam; alParam:LParam): Longint; stdcall;
var
lPar: PMSLLHOOKSTRUCT;
begin
if awParam = WM_LBUTTONDBLCLK then Form1.Label1.Caption := 'WM_LBUTTONDBLCLK';
if awParam = WM_LButtonDOWN then Form1.Label1.Caption := 'WM_LButtonDOWN';
if awParam = WM_LButtonUP then Form1.Label1.Caption := 'WM_LButtonUP';
if awParam = WM_RButtonDOWN then Form1.Label1.Caption := 'WM_RButtonDOWN';
if awParam = WM_RButtonUP then Form1.Label1.Caption := 'WM_RButtonUP';
if awParam = WM_MOUSEMOVE then Form1.Label1.Caption := 'WM_MOUSEMOVE';
if awParam = WM_MOUSEWHEEL then Form1.Label1.Caption := 'WM_MOUSEWHEEL';
lPar := PMSLLHOOKSTRUCT(alParam);
Form1.Label2.Caption:=IntToStr(lPar^.pt.X)+':'+IntToStr(lPar^.pt.Y)+#13#10+
IntToStr(lPar^.flags)+#13#10+
IntToStr(lPar^.mouseData)+#13#10+
IntToStr(lPar^.time);
Result:=CallNextHookEx(0, nCode, awParam, alParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
hhm:=SetWindowsHookEx(WH_MOUSE_LL, @HookCallBack, Hinstance, 0);
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, 100, 100, 0, 0);
Application.ProcessMessages;
sleep(1000);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 100, 100, 0, 0);
end;
end.