最好能翻译到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;