// Das Beispiel zeigt eine mögliche Anwendung von CreateProcess.
// Es wird über einen Button ein neuer Prozess erzeugt, in dem man von
// Notepad eine Textdatei öffnen läßt. Zu Demonstartionszwecken wird
// dieser Prozess mittels eines Timers nach 10 Sekunden wieder beendet.
// Während der neue Prozess läuft, wird (nur als Beispiel) das
// eigentliche Programm versteckt, und bei Beendigung des Prozesses
// wieder hervorgeholt.
// Siehe auch
Anwendung mit Anmeldung starten

// Getestet mit D4 unter Win98 und XP

var 
  Form1: TForm1; 
 
implementation 
 
{$R *.DFM} 
 
var 
  StartupInfo: TStartupInfo; 
  ProcessInfo: TProcessInformation; 
  prog, doc: string; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  Timer1.interval := 0; 
end; 
 
function start: boolean; 
begin 
  StartupInfo.cb := Sizeof(StartupInfo); 
  FillChar(StartupInfo, Sizeof(StartupInfo), #0); 
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW; 
  StartupInfo.wShowWindow := SW_MAXIMIZE; 
  result := CreateProcess(nil, pchar(prog + #32 + doc), nil, nil, false, 
    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, 
    StartupInfo, ProcessInfo); 
end; 
 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  prog := 'NOTEPAD.EXE'; 
  doc := 'C:\TEST.TXT'; 
  if not fileexists(doc) then begin 
    application.messagebox(pchar('Datei "' + doc + '" nicht gefunden !'), 
      'FEHLER', 16); 
    exit; 
  end; 
  if not start then 
    showmessage(SysErrorMessage(getlasterror)) 
  else begin 
    showWindow(application.handle, sw_hide); 
    visible := false; 
    Timer1.interval := 10000; 
    repeat 
      Application.ProcessMessages; 
     // hier können bei Bedarf weitere Dinge 
     // passieren, während der andere Prozess läuft 
    until 
      (WaitforSingleObject(ProcessInfo.hProcess, 0) <> WAIT_TIMEOUT) 
      or (application.terminated); 
    CloseHandle(ProcessInfo.hThread); 
    CloseHandle(ProcessInfo.hProcess); 
    Timer1.interval := 0; 
    if application.terminated then exit; 
    visible := true; 
    showWindow(application.handle, sw_shownormal); 
  end; 
end; 
 
procedure TForm1.Timer1Timer(Sender: TObject); 
begin 
  Timer1.interval := 0; 
  if ProcessInfo.hProcess > 0 then 
    terminateprocess(ProcessInfo.hProcess, 0); 
end; 


Zugriffe seit 6.9.2001 auf Delphi-Ecke