Delphi-PRAXiS

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 16: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 16: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 16: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 17: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 17: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 17:12

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

DeddyH 24. Okt 2007 17: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 17: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 17: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 17:23

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

DeddyH 25. Okt 2007 17:35

Re: button in anderem fenster drücken
 
Wenn Du ein Formular erstellst, darauf ein Panel, darauf eine GroupBox und darauf ein Label, dann ist das Label ein Kind der GroupBox, diese ein Kind des Panels und dieses ein Kind des Formulars :zwinker: .

lbccaleb 25. Okt 2007 18:06

Re: button in anderem fenster drücken
 
Liste der Anhänge anzeigen (Anzahl: 1)
hy, darksniper ich hatte vor einiger zeit auch mal angefangen sowas zu programmieren, ich bin aber leider nicht fertig gewordenu nd auch fehlte mir die zeit, ich habe mal das programm mit angehängt, vllt kannst du mit dem ja was anfangen, nur leider geht es noch nicht ganz so wie es soll, das ganze ist aber nonvcl gecoded...

Strahlex 25. Okt 2007 19:56

Re: button in anderem fenster drücken
 
Hallo :hi:

Also Ich verwende X-Spy, das funktioniert ganz gut und hat auch einen Code-Generator:
X-Spy :thumb:

Darksniper 25. Okt 2007 21:17

Re: button in anderem fenster drücken
 
Liste der Anhänge anzeigen (Anzahl: 1)
ok habs jetzt (glaub ich) verstanden

aber ich glaub dass dieser button direkt auf der form platziert ist

(siehe anhang)

wie soll ich das denn jetzt mir FindWinowsEX und sendmessage schreiben?

lbccaleb 25. Okt 2007 21:26

Re: button in anderem fenster drücken
 
hast dir mal mein proggy angesehen da lief alles soweit, nur komischer weise startet er das programm selber nicht so wie ich es will, er sagt immer benutzen sie die richtige exe datei oder sowas in der art weiß nicht mehr genau ist schon wieder ne weile her der spass..

Apollonius 25. Okt 2007 21:29

Re: button in anderem fenster drücken
 
Hast du dir FindWindowEx mal angeschaut?

Darksniper 25. Okt 2007 21:30

Re: button in anderem fenster drücken
 
dein programm öffnet den launcher aber sonst auch nichts [du hast silkroad falsch geschrieben(im programm)]

ja ok hab ich natürlich aber da steht das hier in der hilfe
Zitat:

HWND FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);
meine antwort:
:?: :gruebel: :?:

parent weis ich nicht richtig was was man da schreiben soll (bekommt man das durch FindWindow....?)
Childafter der button ist direkt auf dem formular aber wie schreibt man das?
Class 'Button'
Window ???

[OT] wie kann man zu einem anderem programm wechseln (Alt+Tab ähnlich)
ich will von 'silk simul' zu 'sro_client' wechseln [/OT]

Darksniper 25. Okt 2007 22:04

Re: button in anderem fenster drücken
 
ICH HAB'S
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  hBtnWnd: HWND;
begin
  hBtnWnd :=FindWindow('#32770', 'Silkroad Online Launcher');
  hBtnWnd :=FindWindowEx(hBtnWnd, 0, 'Button', '');
  begin
    SendMessage(hBtnWnd, BM_CLICK, 0, 0);
  end;
end;

lbccaleb 25. Okt 2007 22:49

Re: button in anderem fenster drücken
 
hatte ich doch so oder nicht??


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz