Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Mausklick ausführen, ohne Mauszeigerbewegung. (https://www.delphipraxis.net/146006-mausklick-ausfuehren-ohne-mauszeigerbewegung.html)

Lostriga 12. Jan 2010 01:32

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

s.h.a.r.k 12. Jan 2010 01:37

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.

omata 12. Jan 2010 01:38

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;

Lostriga 12. Jan 2010 01:45

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

sx2008 12. Jan 2010 05:49

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;

Lostriga 12. Jan 2010 22:51

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:
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;
Das gleiche wie eben nur halt in einer Procedure zusammen gefasst.
Delphi-Quellcode:
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;
Dieses zeigt bei mir keinen Effekt, die X und Y Koordinaten haben anscheinend keinen Einfluss.
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;

procedure TForm1.Button1Click(Sender: TObject);
var
  P:TPoint;
begin
  P.X:=500;
  P.Y:=500;
  MakeMouseClick(P);
end;
Habe auch nach längerem, weiterem Stöbern nicht´s gefunden, :glaskugel: es geht anscheinend nicht. :cry:


Mit freundlichem Gruß

Lostriga

DeddyH 13. Jan 2010 09:04

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.

Lostriga 13. Jan 2010 23:58

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

Luckie 14. Jan 2010 00:46

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 Delphi-Referenz durchsuchenShellExecute verwenden.

Lostriga 14. Jan 2010 00:51

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.
Seite 2 von 3     12 3      

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