![]() |
Fremde Anwendung ansteuern
Hallo 8)
ich muss aus meiner Anwendung eine (ganz einfache) andere fremde Anwendung starten (nur ein Formular mit einem Edit-Feld und einem Button. Ich muss in das Edit dann automatisch was schreiben und den OnClick des Buttons auslösen. Geht das überhaupt? Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
Klar geht das.
Zum Starten kannst du Shellexecute nehmen oder CreateProcess, siehe dazu auch die Code-Library. Zum Steuern selber kannst du dir ja mal das hier ankucken: ![]() Für's edit kannst du ja mal selber suchen :-) Das wurde schon einige mal hier besprochen... |
Re: Fremde Anwendung ansteuern
Danke Alexander :D ,
ich werde am Wochenende ausprobieren ob ich mit dem Problem irgendwie zu Recht komme. Falls nicht melde ich mich nächste Woche noch einmal zur Wort Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
Schon ein erstes Problem :oops:
wie bekomme ich die Handle der Fremder Anwendung um diese dann z.B. an solche Funktion: function ClickButton(ParentWindow: Hwnd; ButtonCaption: string): Boolean; weiter geben? Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
Hallo,
suche mal nach ![]() und wähle z.B. ![]() |
Re: Fremde Anwendung ansteuern
Hallo APP und andere System Profis 8)
Wie ich sehe hier gibt’s absolute Profis in diesem für mich ganz neuem Bereich. Ich bräuchte nur den Übergang zwischen: 1.) Ein fremder Programm automatisch öffnen 2.) Seine Handle dann herausholen (ich kapiere es hier nicht) 3.) Diese auf die genannte Funktion übergeben function ClickButton(ParentWindow: Hwnd; ButtonCaption: string): Boolean; Es muss ein Program Test.Exe gestartet werden und ein Button angeklickt werden... sonnst nicht...Es dürfte für Euch ungefähr so schwer sein wie für mich z.B. ein berechnetes Feld zu sortieren (Datenbanken) Wäre sehr Dankbar. Die Links sind zwar schön und gut... blicke ich aber nicht... Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
Wie wärs denn mit
Delphi-Quellcode:
? Vielleicht reicht das ja schon.
ShellExecute
|
Re: Fremde Anwendung ansteuern
Lieber Hansa :D
Du bist doch ein Datenbank-Profi so weit ich weiß... lass es gut sein... Das ist natürlich nicht das was ich brauche...Wie man startet weiß ich schon... Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
Zitat:
|
Re: Fremde Anwendung ansteuern
Moin Paul jr.,
vielleicht kommst Du ja mit diesem Beispiel weiter. Dieses Beispiel setzt voraus, dass der anzuklickende Button die Klasse BUTTON hat, und nicht beispielsweise TButton oder vielleicht noch ganz anders. Ausserdem gehe ich hier davon aus, dass das Hauptfenster auf jeden Fall gefunden werden kann, da ich keine Absicherung treffe, für den Fall, dass das Fenster nicht da ist (dann läuft die Routine in eine Endlosschleife!) Das Beispiel ist ungetestet, sollte aber funktionieren.
Delphi-Quellcode:
// Für den Aufbau dieser Funktion siehe EnumChildProc im PSDK
// Der 1. Parameter ist das Handle des gerade gefundenen Child Window // Der 2. Parameter kann beliebig verwendet werden. // Ich übergebe hier die Adresse einer Variablen vom Typ DWORD, in der dann, // wenn der Button gefunden wurde, dessen aktuelles Handle zurückgegeben wird function FindButton(const AhWindow : DWORD;const ApButton : PDWORD) : longbool; stdcall; var pCaption : PChar; dwLen : DWORD; begin // True => Nächstes Child verarbeiten, soweit noch vorhanden Result := true; // Prüfen, ob das gefundenen Childwindow ein BUTTON ist pCaption := AllocMem(255); try // Klassenname konnte nicht ausgelesen werden, dann fertig if GetClassName(AhWindow,pCaption,255) = 0 then exit; // Ist kein Button, dann fertig if trim(UpperCase(pCaption)) <> 'BUTTON' then exit; finally FreeMem(pCaption,255); end; // Captionlänge auslesen, und entsprechend Speicher reservieren // (+1 wg. der terminierenden Null, da WM_GETTEXTLENGTH die Länge // ohne diese zurückgibt) dwLen := SendMessage(AhWindow,WM_GETTEXTLENGTH,0,0); pCaption := AllocMem(dwLen+1); try // Caption auslesen SendMessage(AhWindow,WM_GETTEXT,dwLen,lParam(pCaption)); // ist es nicht die gesuchte Caption dann fertig if AnsiUpperCase(trim(pCaption)) <> 'BUTTON CAPTION' then exit; // False => Nicht weitersuchen, da Button gefunden Result := false; // Das Handle des Button zurückgeben ApButton^ := AhWindow; finally FreeMem(pCaption,dwLen+1); end; end; procedure TForm1.Button1Click(Sender: TObject); var hWindow : DWORD; hButton : DWORD; begin // Programm starten ShellExecute(0,'open','Pfad der Exedatei',nil,nil,SW_NORMAL); // und auf das Handle des Fensters warten hWindow := 0; while hWindow = 0 do hWindow := FindWindow(nil,'Titel des zu suchenden Fensters'); // Die Child Windows durchgehen hButton := 0; EnumChildWindows(hWindow,@FindButton,integer(@hButton)); // Wenn hButton <> 0 ist, wurde der Button gefunden if hButton = 0 then exit; // und kann angeklickt werden SendMessage(hButton,BM_CLICK,0,0); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:53 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-2025 by Thomas Breitkreuz