Re: Mausklick ausführen, ohne Mauszeigerbewegung.
Aloa,
ich habe nun mal bei mir so ein bisschen "rumgepfuscht", das (Sender: TObject) sowohl im type als auch in der Procedure durch (AP: TPoint) bzw. (X, Y:integer) ersetzt und sowas. (kam nur Mist herraus) Methoden erstellen sich ja durch das Doppelklicken auf die Elemente bzw. durch die Benutzung der Ereignisleiste der jeweilige Elemente. Erfahrung mit dem schreiben von eigenen Methoden, ohne (so scheint es mir grad) einem Element, habe nicht so. *nicht meinen Kopf abreißen >_<* Mit freundlichem Gruß Lostriga |
Re: Mausklick ausführen, ohne Mauszeigerbewegung.
Dann fehlen dir einige Grundlagen. Ich denke, dass es besser sein wird, dass du dir ein paar Delphi-Tutorials durchliest und dann hier weiter machst. Denn sonst wirst du nur seeeehr schwer ans Ziel kommen.
|
Re: Mausklick ausführen, ohne Mauszeigerbewegung.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var P:TPoint; X, Y:integer; begin X:=100; Y:=100; if GetCursorPos(P) then begin SetCursorPos(X, Y); Mouse_Event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); SetCursorPos(P.X, P.Y); end; end; |
Re: Mausklick ausführen, ohne Mauszeigerbewegung.
Aloa,
hatte gerade nen kleinen Schriftfehler im TForm bei mir gefunden, hab mich da wohl irgendwie/irgwann vertippt. Also ok, jetzt tut sich was, allerdings bewegt sich der Cursor nach ganz unten rechts. @ omata Das hatte ich nun nach der TForm Berichtigung und einer kleinen Änderung auch genau so, das Ergebnis ist allerdings ein Dauerklick auf dem Button mit dem ich es ausführe (Button1). Edit: **nachdem ich ein offenes D3D Fenster beiseite geschoben habe ist der Cursor nun doch weggerutscht, **halt auf die Koordinate, was mich aber nun eigentlich wieder ganz an den Anfang bringt, **der Cursor soll nicht bewegt werden. Edit2: **Gehen wir es mal anders an, im Grunde sind wir ja nun mit allem **genau dort wo ich schon war bevor ich den Thread erstellte. **Der Cursor wird auf die Koordinate bewegt, der Klick wird ausgeführt, und zurück zur Ausgangsposition. **Das geschieht bei mir zwar in 5 Millisekunden (ohne einem Sleep bleibt die Maus gedrückt) **aber dennoch bewegt sich der Cursor. **Was ich halt suche ist ein Klick auf einer Position ohne ganz und gar eine Cursorbewegung zu erwingen. **Ich nenne es jetzt mal einen Geisterklick. **Edit2²: ****Sagen wir, damit es sichtbar ist, dass auf der Position geklickt wurde, ****legt man dort halt nen Ordner hin, so das dieser nach der Aktion markiert ist. Mit freundlichem Gruß Lostriga |
Re: Mausklick ausführen, ohne Mauszeigerbewegung.
Delphi-Quellcode:
procedure MakeMouseClick(AP: TPoint);
begin Mouse_Event(MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_ABSOLUTE, AP.x, AP.y, 0, 0); Mouse_Event(MOUSEEVENTF_LEFTUP or MOUSEEVENTF_ABSOLUTE, AP.x, AP.y, 0, 0); end; |
Re: Mausklick ausführen, ohne Mauszeigerbewegung.
Aloa ihr´s,
mal eine kleine Zusammenfassung womit ich nicht auf das gewünschte Ergebnis komme. Eine Blitzschnelle Bewegung der Maus: Zielpunkt -> Klick -> Ausgangspunkt, leider ist das nicht der gewünschte Effekt.
Delphi-Quellcode:
Das gleiche wie eben nur halt in einer Procedure zusammen gefasst.
procedure TForm1.MakeMouseClick(AP: TPoint);
var P:TPoint; begin if GetCursorPos(P) then begin SetCursorPos(AP.X, AP.Y); Mouse_Event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); SetCursorPos(P.X, P.Y); end; end; procedure TForm1.Button1Click(Sender: TObject); var P:TPoint; begin P.X:=500; P.Y:=500; MakeMouseClick(P); end;
Delphi-Quellcode:
Dieses zeigt bei mir keinen Effekt, die X und Y Koordinaten haben anscheinend keinen Einfluss.
procedure TForm1.Button1Click(Sender: TObject);
var P:TPoint; X, Y:integer; begin X:=1240; Y:=800; if GetCursorPos(P) then begin SetCursorPos(X, Y); Mouse_Event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); SetCursorPos(X, Y); end; end;
Delphi-Quellcode:
Habe auch nach längerem, weiterem Stöbern nicht´s gefunden, :glaskugel: es geht anscheinend nicht. :cry:
procedure MakeMouseClick(AP: TPoint);
begin Mouse_Event(MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_ABSOLUTE, AP.x, AP.y, 0, 0); Mouse_Event(MOUSEEVENTF_LEFTUP or MOUSEEVENTF_ABSOLUTE, AP.x, AP.y, 0, 0); end; procedure TForm1.Button1Click(Sender: TObject); var P:TPoint; begin P.X:=500; P.Y:=500; MakeMouseClick(P); end; Mit freundlichem Gruß Lostriga |
Re: Mausklick ausführen, ohne Mauszeigerbewegung.
Sind das absolute oder relative Koordinaten? Wenn auf Punkt 500,500 Deines Forms geklickt werden soll, musst Du diese erst umrechnen (ClientToScreen), sonst kann das nicht klappen.
|
Re: Mausklick ausführen, ohne Mauszeigerbewegung.
Aloa,
immer erscheine ich so spät. :feuerchen: @ DeddyH Angestrebt sind absolute Koordinaten, allerdings, um es etwas zu vertiefen, im Bereich eines Fenster Handle´s. Also einem Ordner/Programm/D3D Anwendung/.. jenachdem. Im Grunde soll es ja funktionieren wie mit SetCursorPos, bloß das ich versuche den puren Klick "zu positionieren", der Cursor soll sich keinen Pixel bewegen. Ich habe bisher auch im weiterem Durchforsten des Netzes nichts gefunden, deprimierender Weise bis jetzt auch in keiner anderen Programmiersprache. Mit freundlichem Gruß Lostriga |
Re: Mausklick ausführen, ohne Mauszeigerbewegung.
Dir ist aber schon klar, dass sobald sich die Ordnerstruktur ändert oder der Explorer anders eingerichtet ist, der Klick daneben geht?
Wenn du einen Ordner öffnen willst, solltest du eventuell besser ShellExecute verwenden. |
Re: Mausklick ausführen, ohne Mauszeigerbewegung.
Aloa,
ich möchte keinen Ordner öffnen oder so, ich suche einfach nur eine Möglichkeit SetCursorPos zu "eleminieren". Halt das es vollkommen ohne Cursorbewegung funktioniert, wie man das dann später nutzt, ist erst mal dahin gestellt. Mit freundlichem Gruß Lostriga |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz