procedure CheckResult(b: Boolean);
begin
; if not b then
; ; Raise Exception.Create(SysErrorMessage(GetLastError));
end;
function RunDOS(const Prog, CommandLine,Dir: String;var ExitCode
WORD): String;
var
; HRead,HWrite:THandle;
; StartInfo:TStartupInfo;
; ProceInfo:TProcessInformation;
; b:Boolean;
; sa:TSecurityAttributes;
; inS:THandleStream;
; sRet:TStrings;
begin
; Result := ';
; FillChar(sa,sizeof(sa),0);
; //设置允许继承,否则在NT和2000下无法取得输出结果
; sa.nLength := sizeof(sa);
; sa.bInheritHandle := True;
; sa.lpSecurityDescriptor := nil;
; b := CreatePipe(HRead,HWrite,@sa,0);
; CheckResult(b);
; FillChar(StartInfo,SizeOf(StartInfo),0);
; StartInfo.cb := SizeOf(StartInfo);
; StartInfo.wShowWindow := SW_HIDE;
; //使用指定的句柄作为标准输入输出的文件句柄,使用指定的显示方式
; StartInfo.dwFlags := STARTF_USESTDHANDLES+STARTF_USESHOWWINDOW;
; StartInfo.hStdError := HWrite;
; StartInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE);//HRead;
; StartInfo.hStdOutput := HWrite;
; b := CreateProcess(PChar(Prog),//lpApplicationName: PChar
; ; ; ; PChar(CommandLine), //lpCommandLine: PChar
; ; ; ; nil, //lpProcessAttributes: PSecurityAttributes
; ; ; ; nil, //lpThreadAttributes: PSecurityAttributes
; ; ; ; True, //bInheritHandles: BOOL
; ; ; ; CREATE_NEW_CONSOLE,
; ; ; ; nil,
; ; ; ; PChar(Dir),
; ; ; ; StartInfo,
; ; ; ; ProceInfo );
; CheckResult(b);
; WaitForSingleObject(ProceInfo.hProcess,INFINITE);
; GetExitCodeProcess(ProceInfo.hProcess,ExitCode);
; inS := THandleStream.Create(HRead);
; if inS.Size>0 then
; begin
; ; sRet := TStringList.Create;
; ; sRet.LoadFromStream(inS);
; ; Result := sRet.Text;
; ; sRet.Free;
; end;
; inS.Free;
; CloseHandle(HRead);
; CloseHandle(HWrite);
end;