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!