Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Exe aufrufen und Rückgabewert auswerten (https://www.delphipraxis.net/210420-exe-aufrufen-und-rueckgabewert-auswerten.html)

DieDolly 21. Apr 2022 20:09

AW: Exe aufrufen und Rückgabewert auswerten
 
Könntest du mir davon ein Beispiel schicken? Davon verstehe ich gerade überhaupt nichts.

Was wm-copydata angeht, könnte das eventuell so bei mir funktionieren:
- ExeA ruft ExeB auf
- ExeA wartet auf Beendigung von ExeB
- während ExeB noch läuft, schicke ich per wm-copydata was an ExeA. Dort wird eine Variable mit irgendwas gefüllt.
- sobald ExeB beendet ist, gehts in ExeA weiter und dort könnte ich die variable auswerten.

Könnte klappen :roll:

DeddyH 21. Apr 2022 20:15

AW: Exe aufrufen und Rückgabewert auswerten
 
Im Moment nicht, da ich am Tablet schreibe. Aber RegisterWindowMessage nimmt als Parameter einen PChar auf einen möglichst eindeutigen String entgegen und gibt eine systemweit eindeutige Message-ID zurück. Das eignet sich meiner Meinung nach prima für Dein Anliegen.

venice2 21. Apr 2022 20:31

AW: Exe aufrufen und Rückgabewert auswerten
 
Zitat:

Zitat von DeddyH (Beitrag 1504911)
Im Moment nicht, da ich am Tablet schreibe. Aber RegisterWindowMessage nimmt als Parameter einen PChar auf einen möglichst eindeutigen String entgegen und gibt eine systemweit eindeutige Message-ID zurück. Das eignet sich meiner Meinung nach prima für Dein Anliegen.

eine Message muss man nicht extra registrieren wenn man über beide Quellen verfügt.
Lege dir einfach eine Message an die du in beiden Anwendungen definierst.

DieDolly 21. Apr 2022 20:33

AW: Exe aufrufen und Rückgabewert auswerten
 
Habe das jetzt so gelöst, da ich eh schon einen Handler für WmCopyData im Programm habe.

ExeB
Delphi-Quellcode:
var
 hExistingInstance: THandle;
 pName: PChar;
 aCopyData: TCopyDataStruct;

procedure SendRecord(const aRecordToSend: TCopyDataStruct);
begin
 aCopyData.dwData := ... irgendein int wert, max cardinal;
 SendMessage(hExistingInstance, WM_COPYDATA, 0, LPARAM(@aCopyData));
end;

procedure SendReturnCode(const ReturnString: string);
begin
 pName := PChar(ReturnString);
 aCopyData.cbData := (StrLen(pName) + 1) * SizeOf(PWideChar);
 aCopyData.lpData := pName;

 SendRecord(aCopyData);
end;

 hExistingInstance := FindWindow(PChar('TFormBlubb'), nil);

 if (hExistingInstance = 0) then
  SendReturnCode('NixOK')
 else
  SendReturnCode('AllesOK');
ExeA
Delphi-Quellcode:
private
  {Private-Deklarationen}
  procedure WMCopyData(var msg: TWMCopyData); message WM_COPYDATA;

procedure TFormBlubb.WMCopyData(var msg: TWMCopyData);
begin
 if msg.CopyDataStruct.dwData = TProgramMeta.iUniqueMutexID then
  Blubb(msg, TParameterType.ptNull)
 else
  inherited;
end;

procedure Blubb(const ParameterList: string; const aParameterType: TParameterType);
begin
 showmessage(ParameterList);
end;

Dalai 21. Apr 2022 20:34

AW: Exe aufrufen und Rückgabewert auswerten
 
Wenn man MSDN-Library durchsuchenShellExecuteEx mit dem Flag SEE_MASK_NOCLOSEPROCESS füttert oder MSDN-Library durchsuchenCreateProcess benutzt, kann man auf das Ende der Ausführung warten und dann letztlich mit MSDN-Library durchsuchenGetExitCodeProcess den Rückgabewert holen; ist dieselbe Funktion, mit der man prüft, ob der Prozess noch läuft.

Grüße
Dalai

himitsu 21. Apr 2022 22:56

AW: Exe aufrufen und Rückgabewert auswerten
 
Stichwort: IPC

da gibt es tausende Möglicheiten.



Mailslots
SharedMemory (MMF, GlobalAlloc, .........)
Pipes (Named oder Unnamed) / Streams
Sockets (TPC/UDP)
TempFiles
...

peterbelow 22. Apr 2022 10:14

AW: Exe aufrufen und Rückgabewert auswerten
 
Zitat:

Zitat von DieDolly (Beitrag 1504904)
Im Prinzip schon. Aber ich dachte das kann man direkt über ShellExecuteExW() regeln könnte.
Exe-A ruft ShellExecuteExW auf und wartet ja auf einen Boolean-Rückgabewert. Ich dachte da kann man aus Exe-B irgendwas raus senden.

Sieh Dir mal die API-Funktion GetExitCodeProcess an. In deinem Delphi-Programm setzt Du den Exitcode vor dem "end." des DPR-Files mittels
Delphi-Quellcode:
Exitcode := 42;

hoika 22. Apr 2022 10:21

AW: Exe aufrufen und Rückgabewert auswerten
 
Hallo,
ProgrammB setzt den Exitcode (https://docwiki.embarcadero.com/Libr...%20Wert%20Null.).

Wie man das jetzt auswertet, finde ich nicht wirklich im Netz, vielleicht ja so
http://www.delphigroups.info/2/03/482203.html

softtouch 25. Apr 2022 20:44

AW: Exe aufrufen und Rückgabewert auswerten
 
Das müsste eigentlich mit CreatPipe(...) und CreapeProcess(...) gehen, oder mit der Komponente "DosCommand" (in GetIt).

TomyN 25. Apr 2022 21:16

AW: Exe aufrufen und Rückgabewert auswerten
 
Doofe Frage: Warum muss es ein extra Programm sein, wenn es keine Formulare anzeigt?
Wäre da nicht ein Thread sinniger?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 Uhr.
Seite 2 von 2     12   

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