最好能翻译到C#,看不懂啊//程序帮我注释一下吧,TKSprocedure TForm1.RunDosInMemo(DosApp: String; var reInfo :string);
const
ReadBuffer = 2400;
var
Security : TSecurityAttributes; //什么类?作用什么?
ReadPipe,WritePipe : THandle; //同上
start : TStartUpInfo; //同上
ProcessInfo : TProcessInformation; //进程类
Buffer : Pchar; //ref System.string
BytesRead : DWord; //unsinged int32
Apprunning : DWord; //unsinged int32
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.hStdError := WritePipe;
start.hStdInput := ReadPipe;
start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
start.wShowWindow := SW_HIDE;
if CreateProcess(nil,PChar(DosApp),@Security,@Security,true,NORMAL_PRIORITY_CLASS,nil,nil,start,ProcessInfo)then
begin
pBar.Min := 1;
pBar.Max := 100;
pBar.Position := 0;
pBar.Visible := true; try
repeat
Apprunning := WaitForSingleObject(ProcessInfo.hProcess,100);
Application.ProcessMessages;
if pBar.Position >= 100 then
pBar.Position := 0;
pBar.Position := pBar.Position+5; until (Apprunning <> WAIT_TIMEOUT); Repeat
BytesRead := 0;
ReadFile(ReadPipe,Buffer[0],ReadBuffer,BytesRead,nil);
if pBar.Position >= 100 then
pBar.Position := 0;
pBar.Position := pBar.Position+5;
Buffer[BytesRead]:= #0;
OemToAnsi(Buffer,Buffer);
reinfo := reinfo + string(buffer);
until (BytesRead < ReadBuffer);
finally
pBar.Visible := false;
end;
end;
FreeMem(Buffer);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ReadPipe);
CloseHandle(WritePipe);
end;
end;
const
ReadBuffer = 2400;
var
Security : TSecurityAttributes; //什么类?作用什么?
ReadPipe,WritePipe : THandle; //同上
start : TStartUpInfo; //同上
ProcessInfo : TProcessInformation; //进程类
Buffer : Pchar; //ref System.string
BytesRead : DWord; //unsinged int32
Apprunning : DWord; //unsinged int32
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.hStdError := WritePipe;
start.hStdInput := ReadPipe;
start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
start.wShowWindow := SW_HIDE;
if CreateProcess(nil,PChar(DosApp),@Security,@Security,true,NORMAL_PRIORITY_CLASS,nil,nil,start,ProcessInfo)then
begin
pBar.Min := 1;
pBar.Max := 100;
pBar.Position := 0;
pBar.Visible := true; try
repeat
Apprunning := WaitForSingleObject(ProcessInfo.hProcess,100);
Application.ProcessMessages;
if pBar.Position >= 100 then
pBar.Position := 0;
pBar.Position := pBar.Position+5; until (Apprunning <> WAIT_TIMEOUT); Repeat
BytesRead := 0;
ReadFile(ReadPipe,Buffer[0],ReadBuffer,BytesRead,nil);
if pBar.Position >= 100 then
pBar.Position := 0;
pBar.Position := pBar.Position+5;
Buffer[BytesRead]:= #0;
OemToAnsi(Buffer,Buffer);
reinfo := reinfo + string(buffer);
until (BytesRead < ReadBuffer);
finally
pBar.Visible := false;
end;
end;
FreeMem(Buffer);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ReadPipe);
CloseHandle(WritePipe);
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货