AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Mausklick ausführen, ohne Mauszeigerbewegung.

Mausklick ausführen, ohne Mauszeigerbewegung.

Ein Thema von Lostriga · begonnen am 12. Jan 2010 · letzter Beitrag vom 23. Feb 2010
Antwort Antwort
Seite 2 von 3     12 3   
Lostriga

Registriert seit: 14. Jun 2008
28 Beiträge
 
#11

Re: Mausklick ausführen, ohne Mauszeigerbewegung.

  Alt 12. Jan 2010, 01:32
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
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#12

Re: Mausklick ausführen, ohne Mauszeigerbewegung.

  Alt 12. Jan 2010, 01:37
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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Mausklick ausführen, ohne Mauszeigerbewegung.

  Alt 12. Jan 2010, 01:38
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;
  Mit Zitat antworten Zitat
Lostriga

Registriert seit: 14. Jun 2008
28 Beiträge
 
#14

Re: Mausklick ausführen, ohne Mauszeigerbewegung.

  Alt 12. Jan 2010, 01:45
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
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#15

Re: Mausklick ausführen, ohne Mauszeigerbewegung.

  Alt 12. Jan 2010, 05:49
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;
fork me on Github
  Mit Zitat antworten Zitat
Lostriga

Registriert seit: 14. Jun 2008
28 Beiträge
 
#16

Re: Mausklick ausführen, ohne Mauszeigerbewegung.

  Alt 12. Jan 2010, 22:51
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, es geht anscheinend nicht.


Mit freundlichem Gruß

Lostriga
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: Mausklick ausführen, ohne Mauszeigerbewegung.

  Alt 13. Jan 2010, 09:04
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Lostriga

Registriert seit: 14. Jun 2008
28 Beiträge
 
#18

Re: Mausklick ausführen, ohne Mauszeigerbewegung.

  Alt 13. Jan 2010, 23:58
Aloa,
immer erscheine ich so spät.

@ 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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#19

Re: Mausklick ausführen, ohne Mauszeigerbewegung.

  Alt 14. Jan 2010, 00:46
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Lostriga

Registriert seit: 14. Jun 2008
28 Beiträge
 
#20

Re: Mausklick ausführen, ohne Mauszeigerbewegung.

  Alt 14. Jan 2010, 00:51
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 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