Einzelnen Beitrag anzeigen

Benutzerbild von smallsmoker
smallsmoker

Registriert seit: 12. Nov 2007
Ort: Duisburg
283 Beiträge
 
#1

Warten bis Anwendung/Prozess beendet wurde

  Alt 24. Okt 2008, 17:14
Delphi-Quellcode:
uses
  Tl32help;

//[...]

function GetProcID(const Filename: String): DWORD;
var
  hProcSnap: THandle;
  pe32: TProcessEntry32;
begin
  result := 0;
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap <> INVALID_HANDLE_VALUE then
  begin
    pe32.dwSize := SizeOf(ProcessEntry32);
    if Process32First(hProcSnap, pe32) then
    begin
      while Process32Next(hProcSnap, pe32) do
      begin
        if pos(AnsiLowerCase(pe32.szExeFile), AnsiLowerCase(ExtractFilename(Filename))) > 0 then
        begin
          result := pe32.th32ProcessID;
          break;
        end;
      end;
    end;
    CloseHandle(hProcSnap);
  end;
end;

function WaitForApplication(EXEName : String): integer;
var
  ExitCode: longword;
  PID: DWord;
  hProcess: THandle;
begin
  result := -1;
  PID := GetProcID(extractfilename(EXEName));
  if PID <> 0 then
  begin
    hProcess := OpenProcess(SYNCHRONIZE or PROCESS_QUERY_INFORMATION, False, PID);
    if hProcess <> 0 then
    begin
      while WaitForSingleObject(hProcess, 50) <> WAIT_OBJECT_0 do
        application.ProcessMessages;
      GetExitCodeProcess(hProcess, ExitCode);
      CloseHandle(hProcess);
      result := ExitCode;
    end
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ExitCode: Integer;
begin
  ExitCode := WaitForApplication('C:\Program Files\FreeMat3.6\Contents\bin\FreeMat.exe'); //könnte auch 'C:\1.exe' seien
  if ExitCode = -1 then
    showmessage('Prozess konnte nicht gefunden werden')
  else
    showmessage('Der Exitcode lautete: ' + inttostr(ExitCode));
end;
Beispielaufruf:
Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
var
  ExitCode: Integer;
begin
  ExitCode := WaitForApplication('1.exe'); //könnte auch 'C:\1.exe' seien
  if ExitCode = -1 then
    showmessage('Prozess konnte nicht gefunden werden')
  else
    showmessage('Der Exitcode lautete: ' + inttostr(ExitCode));
end;
mfg smallsmoker

[edit=Daniel G]Code ergänzt. Mfg, Daniel G[/edit]
  Mit Zitat antworten Zitat