Registriert seit: 7. Feb 2020
132 Beiträge
Delphi 11 Alexandria
|
AW: ShellExecuteEx + TerminateProcess
23. Apr 2021, 16:53
Vielen Dank, das hat mich zu meiner Lösung gebracht. Mir war nicht bewusst, dass man über die Pipes von CreateProcess auch eine Datei angeben kann. Es funktioniert jetzt genau so wie ich es mir vorgestellt habe.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
StartupInfo : TStartupInfo;
SecAttr : TSecurityAttributes;
command : string;
filename : string;
begin
command := 'ping.exe -t delphipraxis.net';
filename := 'D:\output.txt';
ZeroMemory(@SecAttr, SizeOf(TSecurityAttributes));
SecAttr.nLength := SizeOf(SecAttr);
SecAttr.bInheritHandle := True;
fileHandle := CreateFile(PChar(filename), GENERIC_WRITE, FILE_SHARE_WRITE, @SecAttr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
ZeroMemory(@StartupInfo, SizeOf(TStartupInfo));
StartupInfo.cb := SizeOf(TStartupInfo);
StartupInfo.hStdOutput := fileHandle;
StartupInfo.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_HIDE;
CreateProcess(nil, PChar(command), nil, nil, TRUE, 0, nil, nil, StartupInfo, ProcessInfo);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
TerminateProcess(ProcessInfo.hProcess, 0);
CloseHandle(fileHandle);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;
|
|
Zitat
|