调用一个DOS程序后如何获得此程序的返回信息? 最近在学JAVA,老在DOS下调试很不爽,想写一个简单一点的编译环境,调用javac编译后不知如何得到编译信息? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 昨天看到DFW有, 以前在一个网上也见到有,没几行代码转的,不是俺写的得到DOS运行命令的输出procedure Tform1.formCreate(Sender: TObject);begin Memo1.Clear; Edit1.Text := 'ipconfig'end; procedure Tform1.Button1Click(Sender: TObject);const ReadBuffer = 65535;var Security : TSecurityAttributes; ReadPipe,WritePipe : THandle; start : TStartUpInfo; ProcessInfo : TProcessInformation; Buffer : Pchar; BytesRead : DWord; Apprunning : DWord;begin with Security do begin nlength := SizeOf(TSecurityAttributes); binherithandle := true; lpsecuritydescriptor := nil; end; if Createpipe(ReadPipe, WritePipe, @Security, 0) then begin Buffer := AllocMem(ReadBuffer + 1); FillChar(Start,Sizeof(Start),#0); start.cb := SizeOf(start); start.hStdOutput := WritePipe; start.hStdInput := ReadPipe; start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW; start.wShowWindow := SW_HIDE; if CreateProcess(nil,PChar(Edit1.Text),@Security,@Security,true,NORMAL_PRIORITY_CLASS, nil,nil,start,ProcessInfo) then begin repeat Apprunning := WaitForSingleObject(ProcessInfo.hProcess,250); Application.ProcessMessages; until (Apprunning <> WAIT_TIMEOUT); Repeat BytesRead := 0; ReadFile(ReadPipe,Buffer[0],ReadBuffer,BytesRead,nil); Buffer[BytesRead]:= #0; OemToAnsi(Buffer,Buffer); Memo1.Text := Memo1.text + String(Buffer); until (BytesRead < ReadBuffer); end; FreeMem(Buffer); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); CloseHandle(ReadPipe); CloseHandle(WritePipe); end;end; 建议你用EditPlus,可以捕获DOS输出。 有关AutoCAD文件的根据权限的保存浏览问题 将 FastReport2.5 封装到 Dll 中的问题 怎么获取其他线程的光标句柄 Delphi中的编译开关怎样将两个条件并列? 请教:X的n次平方有没有这种函数的?n也包括小数 时间记录 求Delphi5 Pack1 弱智小问题:如何得到文件名???????? 我已经安装成功mygrid.dpk了一个控件怎么使用时还报错误? 如何使floating为False的Dock窗体不能被关闭。谢谢。 如何按要求关闭IE浏览器? 如何传出文件内容?
昨天看到DFW有, 以前在一个网上也见到有,没几行代码转的,不是俺写的
得到DOS运行命令的输出procedure Tform1.formCreate(Sender: TObject);
begin
Memo1.Clear;
Edit1.Text := 'ipconfig'
end;
procedure Tform1.Button1Click(Sender: TObject);
const
ReadBuffer = 65535;
var
Security : TSecurityAttributes;
ReadPipe,WritePipe : THandle;
start : TStartUpInfo;
ProcessInfo : TProcessInformation;
Buffer : Pchar;
BytesRead : DWord;
Apprunning : DWord;
begin
with Security do
begin
nlength := SizeOf(TSecurityAttributes);
binherithandle := true;
lpsecuritydescriptor := nil;
end;
if Createpipe(ReadPipe, WritePipe, @Security, 0) then
begin
Buffer := AllocMem(ReadBuffer + 1);
FillChar(Start,Sizeof(Start),#0);
start.cb := SizeOf(start);
start.hStdOutput := WritePipe;
start.hStdInput := ReadPipe;
start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
start.wShowWindow := SW_HIDE;
if CreateProcess(nil,PChar(Edit1.Text),@Security,@Security,true,NORMAL_PRIORITY_CLASS,
nil,nil,start,ProcessInfo) then
begin
repeat
Apprunning := WaitForSingleObject(ProcessInfo.hProcess,250);
Application.ProcessMessages;
until (Apprunning <> WAIT_TIMEOUT);
Repeat
BytesRead := 0;
ReadFile(ReadPipe,Buffer[0],ReadBuffer,BytesRead,nil);
Buffer[BytesRead]:= #0;
OemToAnsi(Buffer,Buffer);
Memo1.Text := Memo1.text + String(Buffer);
until (BytesRead < ReadBuffer);
end;
FreeMem(Buffer);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ReadPipe);
CloseHandle(WritePipe);
end;
end;