Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi button in anderem fenster drücken (https://www.delphipraxis.net/102170-button-anderem-fenster-druecken.html)

Darksniper 24. Okt 2007 15:02


button in anderem fenster drücken
 
hi

ich will per programm ein button in einem anderen fenster klicken

ich hab schon ein bisschen gebastelt aber das funktioniert irgendwie nicht

hier mal den code:

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
sro_starten.execute; //startet das programm 'Silkroad Online Launcher'
Sleep (7000);        //der zu drückende button erscheint nach +/- 6 sekunden
if FindWindow('#32770', 'Silkroad Online Launcher') <> 0 then begin //fenster wird gesucht (klappt)
SendMessage(FindWindow('#32770', 'Silkroad Online Launcher'), WM_LBUTTONDBLCLK,897, 572; //button soll gedrückt werden. klappt aber irgendwie nicht
panel1.caption:='fenster gefunden und button gedrückt';    
Timer1.Enabled := true; //unwichtig
end
else panel1.caption:='fenster nicht gefunden';
end;
was ist da der Fehler?


kann mir bitte jemand erklähren wie man den button sofort anwählen kann (ohne Mausklick)?

Die daten des button sind folgende(WinSpy):
-Titel/Text keiner
-Klasse "Button"
-Handle "1246858"
-Control ID "1000"
-Koordinaten "(896, 571, 1064, 601)"
-Prozess Pfad "C:\Programme\Silkroad\silkroad.exe"

Apollonius 24. Okt 2007 15:07

Re: button in anderem fenster drücken
 
Wenn die Klasse Button ist - wie kommst du dann auf die Idee, dass du mit FindWindow('#32770', 'Silkroad Online Launcher') den Button findest? Du musst das Handle speichern und dich dann mit FindWindowEx durch die Fenster hangeln. Schau dir also mal mit WinSpy an, wer das Parent dieses Buttons ist, wer dessen Parent usw.

Nuclear-Ping 24. Okt 2007 15:47

Re: button in anderem fenster drücken
 
Soweit ich weiß musst du auch ein WM_LBUTTONDOWN und danach ein WM_LBUTTONUP schicken. Aber keine Ahnung, ob das noch immernoch so üblich ist.

SirThornberry 24. Okt 2007 16:08

Re: button in anderem fenster drücken
 
wie bereits erwähnt solltest du dir das Ergebnis von:
Delphi-Quellcode:
FindWindow('#32770', 'Silkroad Online Launcher')
speichern. Denn der Aufruf benötigt wie jeder Funktionsaufruf Ressourcen. Man sollte nicht zu verschwenderich damit umgehen. Wenn jedes Programm eine Funktion mehr als nötig aufruft wären wir irgendwann an einem Punkt wo nur noch ein Programm zur gleichen Zeit ausgeführt werden kann.

DeddyH 24. Okt 2007 16:11

Re: button in anderem fenster drücken
 
Zitat:

Zitat von SirThornberry
Wenn jedes Programm eine Funktion mehr als nötig aufruft wären wir irgendwann an einem Punkt wo nur noch ein Programm zur gleichen Zeit ausgeführt werden kann.

Das gab es schon mal und nannte sich MS-DOS :zwinker:

SirThornberry 24. Okt 2007 16:12

Re: button in anderem fenster drücken
 
[OT]damals lag es aber nicht an der Ressourcenverschwendung sondern am Betriebssystem.

DeddyH 24. Okt 2007 16:15

Re: button in anderem fenster drücken
 
[OT] Jepp, obwohl heute immer noch viele ihre eigenen Fehler auf's OS schieben [/OT]

Darksniper 25. Okt 2007 16:02

Re: button in anderem fenster drücken
 
:gruebel:
also

wie geht das denn jetzt mit dem FindWindowEx ,was ist ein Parent und was meinst du mit hangeln

Apollonius 25. Okt 2007 16:13

Re: button in anderem fenster drücken
 
Die meisten Fenster haben ein Parent, z.B. schwirrt ja ein Button normalerweise nicht irgendwo im Weltraum rum, sondern ist an sein Parent, normalerweise das Formular, gebunden. Die MSDN sagt zu FindWindow ganz deutlich:
Zitat:

The FindWindow function retrieves a handle to the top-level window whose class name and window name match the specified strings.
Und alle Fenster, die ein Parent haben, sind logischerweise kein Top-Level-Window. Doch es gibt ja noch MSDN-Library durchsuchenFindWindowEx. Mit "hangeln" meine ich, dass du dir erst das Formular mit FindWindow holst, dann mit FindWindowEx ein Kind dieses Formulars, dann dessen Kind... Dazu musst du allerdings wissen, wessen Kind dein gesuchtes Fenster ist, und das solltest du eigentlich mit WinSpy herausfinden können.

Darksniper 25. Okt 2007 16:23

Re: button in anderem fenster drücken
 
und was ist ein kind eines formulares


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 Uhr.
Seite 1 von 2  1 2      

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