2017-02-03 2 views
-2

Ich möchte ein Programm (Exe) aus meiner Delphi-Anwendung ausführen. Ich kann es tun, aber ich möchte überprüfen, ob das Programm bereits ausgeführt wird oder nicht, bevor es ausgeführt wird. Gibt es eine Möglichkeit, es zu tun .. Vielen Dank im Voraus.Wie können wir feststellen, ein Programm läuft bereits in Delphi

+1

See [Auflisten aller Prozesse] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms682623.aspx) auf MSDN. –

+0

Ist das Programm dein? – MBo

+0

Ich bin ein wenig verwirrt, warum niemand dafür stimmte, als Duplikat zu schließen? Dies ist eine sehr häufige Frage ... –

Antwort

2

Die folgende Funktion prüft, ob ein Prozess läuft. Fügen Sie der uses-Klausel "TlHelp32" hinzu.

function ProcessRunning (sExeName: String) : Boolean; 
{ -> sExeName : Name of the EXE without path. Does not have to be the full EXE name. } 

var 
    hSnapShot : THandle; 
    ProcessEntry32 : TProcessEntry32; 

begin 
    Result := false; 

    hSnapShot := CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0); 
    Win32Check (hSnapShot <> INVALID_HANDLE_VALUE); 

    sExeName := LowerCase (sExeName); 

    FillChar (ProcessEntry32, SizeOf (TProcessEntry32), #0); 
    ProcessEntry32.dwSize := SizeOf (TProcessEntry32); 

    if (Process32First (hSnapShot, ProcessEntry32)) then 
     repeat 
      if (Pos (sExeName, 
        LowerCase (ProcessEntry32.szExeFile)) = 1) then 
      begin 
       Result := true; 
       Break; 
      end; { if } 
     until (Process32Next (hSnapShot, ProcessEntry32) = false); 

    CloseHandle (hSnapShot); 
end; { ProcessRunning } 
+0

Das ist, was ich wollte. Vielen Dank. – Anushal

+1

Das mag wie das, was Sie wollen, aber ich bezweifle es. Auf diese Weise können Sie Ihren Prozess abhängig vom Timing mehrmals starten. Was Sie wirklich brauchen, ist eine Lösung mit einem Mutex. Trotzdem ist dies eine nützliche Funktion. –

+0

Wenn Sie diese Funktion aufrufen, bevor Sie den Prozess starten, @Lieven, und True zurückgibt, würden Sie den Prozess nicht erneut starten. Was hat Timing damit zu tun? Gehen Sie davon aus, dass das Ziel darin besteht, dass das Programm eine vorherige Instanz von * sich selbst * erkennt? Es gab keine Anzeichen dafür, dass dies das Ziel ist. –

Verwandte Themen