Registriert seit: 1. Feb 2018
3.691 Beiträge
Delphi 11 Alexandria
|
AW: SpeedButton
28. Jun 2018, 16:19
Du positionierst die Mausposition selber vorher! Das hat nichts mit "klick" zu tun!
Uraltes Beispiel für Links und Rechtsklick an beliebiger Position:
Delphi-Quellcode:
procedure LeftClick(mouseX,mouseY:Word;ResetMouse:Boolean=False;Relative:Boolean=True);
var p:TPoint;
win:HWND;
wRect:TRect;
begin
GetCursorPos(p);
if Relative then
begin
win:=GetForegroundWindow;
GetWindowRect(win,wRect);
mouseX:=mouseX+wRect.Left;
mouseY:=mouseY+wRect.Top;
end;
SetCursorPos(mouseX,mouseY);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
if ResetMouse then SetCursorPos(p.x,p.y);
end;
procedure RightClick(mouseX,mouseY:Word;ResetMouse:Boolean=False;Relative:Boolean=True);
var p:TPoint;
win:HWND;
wRect:TRect;
begin
GetCursorPos(p);
if Relative then
begin
win:=GetForegroundWindow;
GetWindowRect(win,wRect);
mouseX:=mouseX+wRect.Left;
mouseY:=mouseY+wRect.Top;
end;
SetCursorPos(mouseX,mouseY);
mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
if ResetMouse then SetCursorPos(p.x,p.y);
end;
oder kürzer so, auch uralt
Delphi-Quellcode:
mouse_event(MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_MOVE, mouseX, mouseY, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP or MOUSE_MOVE, mouseX, mouseY, 0, 0);
mit SendMessage müsste es so funktionieren:
SendMessage(WindowFromPoint(p), WM_LBUTTONDOWN, MAKELPARAM(p.x, p.y), 0);
edit
Besser statt mouse_event() das SendInput verwenden.
Dieses kann für Tastatur und Maus verwendet werden.
Das wollte ich hier noch mit erwähnt haben da mein Beispiel Ur-Alt ist! Danke @HolgerX
Geändert von KodeZwerg (28. Jun 2018 um 16:55 Uhr)
|