Willst du eine Nachricht empfange vom Dos, oder nur eine bestätigung ob das programm beendet wurde, ich kann dir geben, das du das im tmemo stehen hast, was im dos steht.
Das ist eigendlich ganz einfach:
Delphi-Quellcode:
procedure CaptureDos(command:String;Stringsp:TStrings);
const
CaptureBufferSize = 2500;
var
SecAttrib : TSecurityAttributes;
ReadPipe,writePipe : THandle;
Startup : TStartUpInfo;
ProcessInfo : TProcessInformation;
CaptureBuffer : Pchar;
BytesRead : DWord;
WaitHandle : DWord;
begin
Stringsp.clear;
Stringsp.add('Starte "'+command+'"');
With SecAttrib do
begin
nlength := SizeOf(TSecurityAttributes);
binherithandle := true;
lpsecuritydescriptor := nil;
end;
if Createpipe (ReadPipe, writePipe, @SecAttrib, 0) then
begin
CaptureBuffer := AllocMem(CaptureBufferSize + 1);
FillChar(Startup,Sizeof(Startup),#0);
Startup.cb := SizeOf(Startup);
Startup.hStdOutput := writePipe;
Startup.hStdInput := ReadPipe;
Startup.dwFlags := STARTF_USESTDHANDLES +
STARTF_USESHOWWINDOW;
Startup.wShowWindow := SW_SHOW;
if CreateProcess(nil,
PChar(command),
@SecAttrib,
@SecAttrib,
true,
NORMAL_PRIORITY_CLASS,
nil,
nil,
Startup,
ProcessInfo) then
begin
repeat
WaitHandle := WaitForSingleObject( ProcessInfo.hProcess,100);
Application.ProcessMessages;
until (WaitHandle <> WAIT_TIMEOUT) or application.terminated;
if not application.terminated then
Repeat
BytesRead := 0;
ReadFile(ReadPipe,CaptureBuffer[0],CaptureBufferSize,BytesRead,nil);
CaptureBuffer[BytesRead]:= #0;
OemToAnsi(CaptureBuffer,CaptureBuffer);
Stringsp.Text := Stringsp.Text+String(CaptureBuffer);
until (BytesRead < CaptureBufferSize);
end else Stringsp.add('Fehler!');
FreeMem(CaptureBuffer);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ReadPipe);
CloseHandle(writePipe);
end else Stringsp.add('Konnte Dos Kommando nicht starten, Fehler: #'+
inttostr(getlasterror));
end;
Um die prozedur auszuführen, benutzt du z.B.
procedure CaptureDos('dir c:',Memo1->Lines);
dann bekommste dein dos komando.
[keine garantie, habe ich aus c++ übersetzt...]
Falls ein fehler auftreten sollte, bitte melden!