Delphirus - прграммирование на delphi
   Все о delphi Delphirus - прграммирование на delphi
blocks.gif
Навигация
 

Главная
Статьи
Базы данных
Графика
Защита
Интернет
Система
Тексты
Мультимедиа
Файлы
Формы и окна
Другое
Советы
Базы данных
Графика
Интернет
Мультимедиа
Система
Тексты
Файлы
Файлы
Исходники
Компоненты
Инфо
Поиск по сайту
Обратная связь
Самое популярное
Аккаунт
Карта сайта

 
 
 

Советы по delphi \ Система \ DOS и Консоль \ Запустить консольное приложение и получить его стандартный вывод

Запустить консольное приложение и получить его стандартный вывод

{ 
This function runs a program (console or batch) and adds its output 
to Memo1 
} 

{....} 
  private 
    function RunCaptured(const _dirName, _exeName, _cmdLine: string): Boolean; 
     
{....} 

function TForm1.RunCaptured(const _dirName, _exeName, _cmdLine: string): Boolean; 
var 
  start: TStartupInfo; 
  procInfo: TProcessInformation; 
  tmpName: string; 
  tmp: Windows.THandle; 
  tmpSec: TSecurityAttributes; 
  res: TStringList; 
  return: Cardinal; 
begin 
  Result := False; 
  try 
    { Setze ein Temporares File } 
    { Set a temporary file } 
    tmpName := 'Test.tmp'; 
    FillChar(tmpSec, SizeOf(tmpSec), #0); 
    tmpSec.nLength := SizeOf(tmpSec); 
    tmpSec.bInheritHandle := True; 
    tmp := Windows.CreateFile(PChar(tmpName), 
           Generic_Write, File_Share_Write, 
           @tmpSec, Create_Always, File_Attribute_Normal, 0); 
    try 
      FillChar(start, SizeOf(start), #0); 
      start.cb          := SizeOf(start); 
      start.hStdOutput  := tmp; 
      start.dwFlags     := StartF_UseStdHandles or StartF_UseShowWindow; 
      start.wShowWindow := SW_Minimize; 
      { Starte das Programm } 
      { Start the program } 
      if CreateProcess(nil, PChar(_exeName + ' ' + _cmdLine), nil, nil, True, 
                       0, nil, PChar(_dirName), start, procInfo) then 
      begin 
        SetPriorityClass(procInfo.hProcess, Idle_Priority_Class); 
        WaitForSingleObject(procInfo.hProcess, Infinite); 
        GetExitCodeProcess(procInfo.hProcess, return); 
        Result := (return = 0); 
        CloseHandle(procInfo.hThread); 
        CloseHandle(procInfo.hProcess); 
        Windows.CloseHandle(tmp); 
        { Die Ausgaben hinzufugen } 
        { Add the output } 
        res := TStringList.Create; 
        try 
          res.LoadFromFile(tmpName); 
          Memo1.Lines.AddStrings(res); 
        finally 
          res.Free; 
        end; 
        Windows.DeleteFile(PChar(tmpName)); 
      end 
      else 
      begin 
        Application.MessageBox(PChar(SysErrorMessage(GetLastError())), 
          'RunCaptured Error', MB_OK); 
      end; 
    except 
      Windows.CloseHandle(tmp); 
      Windows.DeleteFile(PChar(tmpName)); 
      raise; 
    end; 
  finally 
  end; 
end; 
// Example: 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  RunCaptured('C:', 'cmd.exe', '/c dir'); 
end;

Название: Запустить консольное приложение и получить его стандартный вывод
Дата публикации: 2004-06-16 (3368 Прочтено)

 
 

 

Page generation 0.037 seconds