Ik ben al een hele poos opzoek naar een oplossing om een return value van een external command line application op te vangen in mijn delphi application.
Ik gebruik ShellExecuteEx om het externe programmatje te starten, wanneer het programma succesvol verloopt returnt het een 0 als er fouten optreden wordt -1 teruggegeven. Alleen krijg ik nergens gevonden hoe ik deze return value kan afvangen. Het enige wat ik tegen kom is een return value van de ShellExecute zelf en niet van het programma wat daarmee wordt gerunt.
Mijn code die ik op dit moment gebruik:
Heeft iemand enig idee of ervaring met dit probleem?
Alvast enorm bedankt!
Ik gebruik ShellExecuteEx om het externe programmatje te starten, wanneer het programma succesvol verloopt returnt het een 0 als er fouten optreden wordt -1 teruggegeven. Alleen krijg ik nergens gevonden hoe ik deze return value kan afvangen. Het enige wat ik tegen kom is een return value van de ShellExecute zelf en niet van het programma wat daarmee wordt gerunt.
Mijn code die ik op dit moment gebruik:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| var SEInfo: TShellExecuteInfo; //contains the info of the shellexecute api ExitCode: DWORD; execFile, params, dir : String; resultCode : Integer; begin execFile := 'testapp.exe'; params := '--direction ' + way + ' --device ' + device + ' --data-file ' + xmlfile + ' --config-file testconfig..xml'; dir := 'externalSoftware/'; // Setup the ShellExecute info FillChar(SEInfo, SizeOf(SEInfo), 0) ; SEInfo.cbSize := SizeOf(TShellExecuteInfo); with SEInfo do begin fMask := SEE_MASK_NOCLOSEPROCESS; Wnd := Application.Handle; lpFile := PChar(ExecFile); lpParameters := PChar(params); lpDirectory := PChar(dir); nShow := SW_HIDE; end; // Start the shell executen and wait for it to finish if(ShellExecuteEx(@SEInfo)) then begin repeat Application.ProcessMessages; GetExitCodeProcess(SEInfo.hProcess, ExitCode); until(ExitCode <> STILL_ACTIVE) or Application.Terminated; result := True end else result := False; |
Heeft iemand enig idee of ervaring met dit probleem?
Alvast enorm bedankt!