![]() |
Handle: Button von app2 aus app1 klicken
ich habe 2 Programme geschrieben, dabei wird app2 von app1 aus aufgerufen und wieder beendet.
Aber wie kann ich jetzt einen buttonklick (ist in app2) von app1 aus ausführen? Bekommt der button einen eigenen handle?! Woher bekomme ich den. Das Prog ist auf der Grundlage von Jens Schumanns Bsp.-Prog aufgebaut (s. ![]() |
Re: Handle: Button von app2 aus app1 klicken
Moin Praktikant,
ein normaler TButton hat ein Handle, dass Du, wie bei jedem anderen Fenster auch mit Hilfe, z.B. von FindWindow, bekommen kannst. Dann noch ein SendMessage mit BM_CLICK an diesen Button geschickt, und das war's. |
Re: Handle: Button von app2 aus app1 klicken
thx! Das ist meist mein großes Problem, die ganzen Befehle zu finden.
Gibt's da eine Bibliothek wo alle Handle Befhele drin stehen, da ja jedes Objekt mit einem anderen Befehl angesprochen wird. Aber mein momentnes Problem ist noch, dass ich keine Handle Adresse zurück bekomme (immer 0), hab schon alles mögliche ausprobiert aber ändert sich nix. Sieht inzwischen folgendermassen aus:
Delphi-Quellcode:
Wo ist mein grundlegender Fehler, habe den button auch schon an der vorderen stelle gehabt und auch mein formularname anstelle von nil eingetragen, aber nie findet er den button. Programm läuft natürlich schon!
for i:=1 to 100000 do //keine while mehr da sonst Endlosschleife
hWindow := FindWindow(nil,'Kommunikation beenden'); //Caption des TButtons, Name geht aber auch nicht Sleep(1000); Label4.Caption:=IntToStr(hWindow); //ausgeben der Handle Adresse |
Re: Handle: Button von app2 aus app1 klicken
Mit FindWindow das Hauptfenster finden, mit FindWindoEx den Button und dann ein BM_CLICKED schicken. Parameter der Befehle können hier:
![]() Sollte der Button nicht direkt auf dem Hauptfenster liegen hilft wohl nur noch eins, mit EnumChildWindows alle Kindfenster enumerieren, bis der Button gefundne wurde. |
Re: Handle: Button von app2 aus app1 klicken
ok, danke für den Hinweis mit FindWindowEx!
Bekomme jetzt auch ein Handle zurück, aber irgendwie nicht das Richtige. Habe wieder herum probiert: Bekomme mal ein Handle selbst wenn das Prog nicht läuft, bzw. mal geht er in die while-endlosschleife. Wenn ich das Prog offen habe dann wechselt er bei jedem button klick die handle adresse, das ist doch auch nicht normal?! Naja, wenn ich dann mit sendmessage mein bmclick schicke passiert zumindest nie etwas. Mein Progaufbau sieht nun folgendermassen aus, wo habe ich da noch ein Fehler?
Delphi-Quellcode:
So wie der code jetzt steht scheint die handle adressierung zu funzen, nur mein prog reagiert nicht auf die sendmessage :(private ButtonKommBeendenHwnd : THandle; [...] var hWindow : DWORD; hButton : DWORD; begin hWindow := 0; while hWindow = 0 do hWindow := FindWindow(nil,'FormKommunikation'); // Die Child Windows durchgehen hButton := 0; while hButton = 0 do hButton := FindWindowEx (hWindow,ButtonKommBeendenHwnd,0,0); //ButtonKommBeenden ist Name des Button der geklickt werden soll // Wenn hButton <> 0 ist, wurde der Button gefunden Label4.Caption:=IntToStr(hButton); if hButton = 0 then exit; // und kann angeklickt werden SendMessage(hButton,BM_CLICK,0,0); |
Re: Handle: Button von app2 aus app1 klicken
Moin Praktikant,
es könnte sein, dass der Button nicht direkt auf dem Formular, liegt, sondern auf einem anderen Element, das wiederum auf dem Formular liegt. Such' hier mal nach ![]() ![]() Da müsstest Du auf Beispiele stossen, wie man sich alle Fenster und Unterfenster heraussuchen lassen kann, sowie deren Caption, und Klassenname. |
Re: Handle: Button von app2 aus app1 klicken
Sonst kannst du ja auch mal
![]() |
Re: Handle: Button von app2 aus app1 klicken
der Button liegt direkt auf dem Hauptformular, da ist kein Button oder sonstiges dazwischen. Ist ja mein Programm, von daher weiß ich das sicher ;)
Schau mir jetzt mal den link an und hoffe ich komme weiter. Edit2: Geschafft :-D Nach weiteren 3Std. probieren hat es jetzt endlich geklappt. Weiß zwar nicht 100% weshalb es vorher nicht funktioniert hat aber hauptsache es geht endlich. Ein Problem war dass ich beim send/postmessage nicht den expliziten buttonnamen angegeben habe -> sendmessage(HandleForm,HandleButton,0,'Name des Buttons') Dann noch ein paar if Abfragen, da u.a. die while Schleife nicht mehr durchlaufen werden darf wenn ich den Hanlde bekommen habe, dann findet er nämlich den Button nicht mehr :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 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