Auf Jaenicke vertrauend habe ich den Code mal zusammengestaucht:
Delphi-Quellcode:
//SHELL TEST DP
function ExecAndWait(Filename, Params:
String;
WindowState: Word = SW_SHOWNORMAL): boolean;
var
{$IFDEF UNICODE} ShExecInfoW: SHELLEXECUTEINFOW;
{$ENDIF}
ShExecInfoA: SHELLEXECUTEINFOA;
// MSDN: ShellExecuteEx, ShellExecuteInfo
begin
Result := false;
if (Filename = '
')
or not FileExists(FileName)
then
exit;
{$IFDEF UNICODE}
begin
ShExecInfoW.Wnd := GetForegroundWindow;
ShExecInfoW.cbSize := SizeOf(SHELLEXECUTEINFOW);
ShExecInfoW.fMask := SEE_MASK_NOCLOSEPROCESS;
ShExecInfoW.lpVerb := '
open';
ShExecInfoW.lpFile := PWideChar(WideString(Filename));
ShExecInfoW.lpParameters := PWideChar(WideString(Params));
ShExecInfoW.lpDirectory := PWideChar(WideString(ExtractFileDir(Filename)));
ShExecInfoW.nShow := WindowState;
Result := ShellExecuteExW(@ShExecInfoW);
try
if Result
then WaitForSingleObject(ShExecInfoW.hProcess, INFINITE);
finally
CloseHandle(ShExecInfoW.hProcess);
end;
end
{$ENDIF}
end;
//SHELL Aufruf ENDE DP
Im gleichen Verzeichnis wie das .exe File meines programms beifndet sich auch die Ping.exe (das mach ich später selbstverständlich noch anders, aus dem WIndows-System-verz starten usw. aber zum Testen tut's das hier).
Mein Aufruf:
ExecAndWait('Ping.EXE','192.168.212.253 >> testping.txt');
Resultat ist ein kurzes Aufploppen einer Shell und direktes Schliessen, eine Datei "testping.txt" taucht aber nicht auf oder so.