Delphi-PRAXiS

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 nach einem Prozessende automatisch machen? (https://www.delphipraxis.net/100153-mausklick-nach-einem-prozessende-automatisch-machen.html)

spox 23. Sep 2007 16:29


Mausklick nach einem Prozessende automatisch machen?
 
Hallo, ich bins wieder :) !
Ich will jetzt einen Mausklick simulieren. Dazu habe ich diesen Code
Delphi-Quellcode:
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
  mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
benutzt. Die Variablen habe ich natürlich noch belegt.
Doch es will trotzdem nicht.
Was ich überhaupt vor habe:
Ich möchte ein Auto-Login-Tool für ein Online-Spiel entwickeln. Dazu wählt man zu erst den Pfad aus und gibt seine Logindaten ein. Daraufhin drückt man auf Starten und das Spiel startet. Es öffnet sich ein Launcher, der News anzeigt und den Clienten auf Updates überprüft. Wenn das fertig ist, taucht ein Startbutton auf. Diesen will ich automatisch anklicken lassen. Das Starten des Programms funktioniert einwandfrei. Soweit so gut. Doch der Mausklick wird nicht ausgelöst.
Kann man die Mausklickaktion auch ohne einen Timer realisieren? Ich meine, ob man Klicken lassen kann, wenn der Startbutton auftaucht. Bis dieser nämlich da ist, kann manchmal mehr und manchmal weniger Zeit vergehen, aufgrund der Internetanbindung. Also wäre ein Timer nicht ideal.

Puhhh ... soviel Text für ein so kleines Problem :xmas:

lbccaleb 23. Sep 2007 16:41

Re: Mausklick nach einem Prozessende automatisch machen?
 
also mit
Delphi-Quellcode:
SetCursorPos(x, y);
kannst du die maus an einem bestimmt punkt setzen und mausklick, da muss ich auch erst mal wieder schauen....

edit:

probier mal das:

Delphi-Quellcode:
SendMessage(Handle, WM_LBUTTONDBLCLK, 10, 10); //für doppelklick
SendMessage(Handle, WM_LBUTTONDOWN, 10, 10); //für linksklick
SendMessage(Handle, WM_RBUTTONDOWN, 10, 10); //für rechtsklick
handle, musst du dein fenster handle angeben

spox 23. Sep 2007 16:51

Re: Mausklick nach einem Prozessende automatisch machen?
 
Was ist ein Fensterhandle ? :gruebel:

lbccaleb 23. Sep 2007 16:55

Re: Mausklick nach einem Prozessende automatisch machen?
 
Zitat:

Zitat von spox
Was ist ein Fensterhandle ? :gruebel:

das ein integer wert der auf dein fenster zeigt wo der klick simuliert werden soll, z.b.: form1.handle!!


hier ist auch noch was bei den schweizern:
mausklick simulieren

spox 23. Sep 2007 17:03

Re: Mausklick nach einem Prozessende automatisch machen?
 
Genau das was bei den Schweizer steht hab ich ja gemacht. Nur leider geht es trotzdem nicht :(
Und der Fensterhandle ist wohl unnötig bei mir, da es nicht um eine Fenster bei meinem Programm geht, sondern um einen Mausklick außerhalb meines Programms. Oder hab ich das mit dem Handle falsch verstanden? :gruebel:

lbccaleb 23. Sep 2007 17:11

Re: Mausklick nach einem Prozessende automatisch machen?
 
Zitat:

Zitat von spox
Genau das was bei den Schweizer steht hab ich ja gemacht.
Und der Fensterhandle ist wohl unnötig bei mir, da es nicht um eine Fenster bei meinem Programm geht, sondern um einen Mausklick außerhalb meines Programms. Oder hab ich das mit dem Handle falsch verstanden? :gruebel:

nee schon richtig, nur wenn es nicht dein fenster ist musst du das fensterhandle angeben von dem fenster auf welchem du den klick simulieren willst, das kannst du rausbekommen mit:

Delphi-Quellcode:
FindWindow('GenericClass', 'hier den fensternamen des fensters eintragen, wo du den klick emulieren willst');
das müsste eigentlich so gehen :gruebel:

spox 23. Sep 2007 17:25

Re: Mausklick nach einem Prozessende automatisch machen?
 
Soll ich dafür eine neue Prozedur machen?

lbccaleb 23. Sep 2007 17:28

Re: Mausklick nach einem Prozessende automatisch machen?
 
Zitat:

Zitat von spox
Soll ich dafür eine neue Prozedur machen?


also müsste dann ungefähr so aussehen (bsp.: Internet Explorer):


Delphi-Quellcode:
SendMessage(FindWindow('GenericClass', 'Internet Explorer'), WM_LBUTTONDOWN, 10, 10);

spox 23. Sep 2007 17:42

Re: Mausklick nach einem Prozessende automatisch machen?
 
hmmm ... Also es funktioniert immer noch nicht. Was mache ich falsch?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 sro_starten;
 Sleep (7000);
 SendMessage(FindWindow('GenericClass', 'Silkroad Online Launcher'), WM_LBUTTONDBLCLK, 754, 516);
 //Timer1.Enabled := true;
end;
Beziehen sich die Koordinaten auf das Handlefenster, oder auf den gesamten Bildschirm?

lbccaleb 23. Sep 2007 17:51

Re: Mausklick nach einem Prozessende automatisch machen?
 
Zitat:

Zitat von spox
hmmm ... Also es funktioniert immer noch nicht. Was mache ich falsch?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 sro_starten;
 Sleep (7000);
 SendMessage(FindWindow('GenericClass', 'Silkroad Online Launcher'), WM_LBUTTONDBLCLK, 754, 516);
 //Timer1.Enabled := true;
end;
Beziehen sich die Koordinaten auf das Handlefenster, oder auf den gesamten Bildschirm?

das mit den koordinaten kann ich dir leider auch nicht genau sagen!!

aber als ersten schritt solltest du versuchen das fenster zu finden auf dem du den klick machen willst, also z.b:

Delphi-Quellcode:
if FindWindow('GenericClass', 'Silkroad Online Launcher') <> 0 then showmessage('fenster gefunden');
das würde dir zumindest erstmal sagen ob er das fensterhandle findet... weil wenn nicht dann ist ja schon was ander beschriftung falsch, also an 'Silkroad Online Launcher'


mal ganz neben bei, ist das ein programm oder eine iseite oder was ist das überhaupt??


edit:

vllt. schickst/postest du mal ein screenshot von dem programm, damit wir uns (im wahrsten sinne des wortes) nen bild von machen können ;-)

jfheins 23. Sep 2007 17:58

Re: Mausklick nach einem Prozessende automatisch machen?
 
Such mal nach WinspyWinspy, das kann dir den code für deine Suche nach den Handle liefern ;)

Wenn du das Handle im Code hast, einfach ein SendMessage(Handle, WM_LBUTTONDOWN, 10, 10); wie oben schon empfohlen ;)

Das mit dem Mausklick simulieren ist ... nicht sooo gut ... was ist, wenn der Button nicht sichtbar ist?

spox 23. Sep 2007 18:44

Re: Mausklick nach einem Prozessende automatisch machen?
 
Ich habe mir jetzt WinSpy geladen. Ist super das Programm. Hier ein Bild von dem Silkroad Online Launcher:
http://img3.imagebanana.com/img/zswh...uncher.bmp.png

Ganz rechts ist unschwer erkennbar der Startbutton. Der hat den Handle 3410278 (das habe ich mit WinSpy herrausgefunden). Dieser Button kommt, wenn Der Launcher das Spiel auf Updates überprüft hat, und die News links geladen wurden. jfheins hat Recht, dass es nicht optimal ist, es mit Mausklick zu machen. Der Button kann nämlich mal nach 5 mal nach 10 Sekunden kommen. Manchmal aber auch erst nach 3 Minuten (jenachdem, ob ein Updatevorgang nötig ist, oder nicht).
Kann man mit dem Handle vom Button etwas anfangen?

Hier mal die wesentlichen Daten von WinSpy:

Titel/Text: Silkroad Online Launcher
Klasse: #32770
Handle: 3738016
Control ID: 0
Koordinaten: (162, 160, 862, 579)
Prozess Pfad:C:\Programme\Silkroad\silkroad.exe

Kann man damit etwas anfangen? Man könnte doch den Button anklicken, sobald er erscheint, oder?

lbccaleb 23. Sep 2007 19:00

Re: Mausklick nach einem Prozessende automatisch machen?
 
du hast ne pn ;-)

wie sieht es aus mit

wie sieht es aus mit der findwindow funktion??? hast du es mal aus probiert ob er das fenster findet??

jfheins 23. Sep 2007 22:33

Re: Mausklick nach einem Prozessende automatisch machen?
 
Du hast etwas wichtiges übersehen:

Zitat:

Zitat von jfheins
Such mal nach WinspyWinspy, das kann dir den code für deine Suche nach den Handle liefern ;) ...

Das Handle allein ist unwichtig und wird sich wahrscheinlich jedesmal ändern ;)

lbccaleb 23. Sep 2007 22:35

Re: Mausklick nach einem Prozessende automatisch machen?
 
ja das hab ich ihm auch schon gesagt wir haben das eben per icq hinngebogen soweit haben wirs jetzt hat er nur noch nen paar andere probleme ;-)

aber das kommt morgen, jetzt ist schlafenszeit, hehe


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 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