| 
 
 
{Diese Funktion führt ein Programm (Konsole oder Batch-File) aus und fügt
 die Ausgaben zu Memo1 hinzu
 }
 
 
 {
 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 Temporäres 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 hinzufügen }
 { 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;
 
 
 // Beispiel:
 // Example:
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
 RunCaptured('C:\', 'cmd.exe', '/c dir');
 end;
 
 
   
   
    | 
         
          | Bewerten Sie diesen Tipp: |  |  |