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/)
-   -   OK-Button einer Message Box in fremden Programm drücken (https://www.delphipraxis.net/204748-ok-button-einer-message-box-fremden-programm-druecken.html)

Jumpy 25. Jun 2020 09:49

OK-Button einer Message Box in fremden Programm drücken
 
Hallo,

ich muss ein fremdes Importprogramm aus meinem Programm heraus starten mit ein paar Parametern, damit es weis was es machen muss. Dieses Programm kann aber neben dem Namen der zu importierenden Datei nur einen weiteren Parameter verarbeiten. Theoretisch kennt es einen Parameter Batch aber den kann ich ihm nicht mitgeben, da ein anderen Parameter, der das Importverhalten steuert wichtiger ist und mitgegeben werden muss.

Das Programm hat ein sichtbares Fenster, wo im Prinzip nur eine Fortschrittsanzeige und ein Abbruch-Button drauf ist. Wenn das Programm fertig ist, poppt (ohne den Parameter Batch) eine Message-Box auf "123 Datensätze wurden importiert" mit OK-Button. Dieser muss betätigt werden, dann schließt sich die Message-Box und das Programm.

Könnt ihr mir ein paar Stichpunkt/Links geben, wie ich da vorgehen muss?
- Fenster des Programms finden
- warten und irgendwann erkennen, das es jetzt eine Message Box des Programms gibt (ist das ein weiteres Fenster?)
- Wenn die Message-Box offen ist, könnte ich das Programm mit Task-Kill abschießen, deswegen ist das folgende nur "Kür":
- Buttton finden und betätigen

Nachtrag: Das Programm schreibt auch nach und nach in eine Log-Datei. Ich könnte auch alle paar Sekunden gucken, ob diese nicht mehr wächst und das Programm dann abschießen. Dies schein mir aber unsicherer, da der Import auch schon mal ein paar Sekunden hängen kann und dann aber weiter läuft und ich könnte dies fälschlicherweise schon als "ich bin fertig" interpretieren.

KodeZwerg 25. Jun 2020 11:44

AW: OK-Button einer Message Box in fremden Programm drücken
 
Zitat:

Zitat von Jumpy (Beitrag 1468199)
Könnt ihr mir ein paar Stichpunkt/Links geben, wie ich da vorgehen muss?
- Fenster des Programms finden
- warten und irgendwann erkennen, das es jetzt eine Message Box des Programms gibt (ist das ein weiteres Fenster?)
- Wenn die Message-Box offen ist, könnte ich das Programm mit Task-Kill abschießen, deswegen ist das folgende nur "Kür":
- Buttton finden und betätigen

Meine Vorgehensweise ist immer die selbe, alles per WinApi lösen.

zu fenster des programms finden = FindWindowW
zu warten = delay/sleep oÄ.
zu Buttton finden = per WinSpy oÄ. die ID des gewünschten Elements auslesen

Codeseitig würde ich mir dann über die FindWindow methode das Handle abholen und im Kontext des Handles auf die ID des Buttons warten um ein Click event oÄ. auszuführen.
Einschlägige Codebeispiele findest Du hier wenn man nach "Fernsteuern" sucht.

Für eine eindeutige Anleitung würde man das fernzusteuernde Programm benötigen um ein Beispiel zu erstellen.


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