API - capturar a tela de saida de um programa DOS

Top  Previous  Next

procedure TForm1.Button1Click(Sender: TObject);

var

  StartupInfo: TStartupInfo;

  ProcessInformation: TProcessInformation;

  rc : Boolean;

  Handle : THandle;

begin

  GetStartupInfo(StartupInfo); // pega informação de início atual

  Handle := CreateFile('saida.txt',GENERIC_READ or GENERIC_WRITE,0,nil,CREATE_ALWAYS,0,0);  // cria arquivo de saída

  // inicializa campos de StartupInfo

  with StartupInfo do

  begin

    // redireciona saída

    hStdOutput := Handle;

    // não mostra janela DOS

    wShowWindow := SW_HIDE;

    dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;

  end;

  // dispara processo

  rc := CreateProcess(nil, 'command.com /c dir', nil, nil, True, 0, nil, nil, StartupInfo, ProcessInformation);

  // Espera terminar o segundo parâmetro espera indefinidamente

  if rc then

    WaitForSingleObject(ProcessInformation.hProcess, INFINITE);

 

  CloseHandle(Handle);                      // fecha arquivo de saída

  Listbox1.Items.LoadFromFile('saida.txt'); // le na listbox

  DeleteFile('saida.txt');                  // apaga arquivo de saída

end ;