Mehrfachstart verhindern |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
Über eine Mutex lässt sich verhindern, dass ein Programm mehrmals gestartet werden kann.Die Mutex sollte zum frühstmöglichen Zeitpunkt erstellt werden. Man kann die Zeilen beispielsweise in einer eigenen Unit ablegen und diese an erster Stelle der Uses-Klausel schreiben.Der dritte Parameter von CreateMutex vergibt einen Namen mit dem die Mutex im System identifiziert werden kann (z.B. den Programmnamen).Der Projekt-Quelltext könnte dann in etwa so aussehen:
program Project1;
uses
mutex in 'mutex.pas', //Hier wird das Mutex-Objekt erstellt.
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Die Unit für das Mutex-Objekt sieht folgendermaßen aus:
interface
implementation
uses
Windows;
var
mHandle: THandle;
initialization
//Der Name für die Mutex muss natürlich angepasst werden
mHandle := CreateMutex(nil, True, PChar('Programmname'));
if GetLastError = ERROR_ALREADY_EXISTS then
//Die Bedingung trifft zu, wenn die Mutex schon existiert.
//Dies ist der Fall, wenn das Programm bereits gestartet
//wurde.
Halt;
finalization
if mHandle <> 0 then
CloseHandle(mHandle);
end.
Für Delphi 1 (16 Bit) gibt es eine wesentlich einfachere Variante. Die Anwendung bekommt das Handle der letzten aktiven Instanz mitgeteilt. Man muss also nur nachsehen, ob die entsprechende Variable (HPrevInst) 0 enthält. Die Variable ist zwar auch in späteren Versionen noch verfügbar, erfüllt aber seit Delphi 2 keinen Zweck mehr.
- Laufende Anwendung beenden
- Verwendung von CreateProcess
- Herausfinden, ob ein bestimmtes Programm gerade läuft
- Anwendung für eine bestimmte Zeit pausieren
- Programm vor dem Taskmanager verstecken
- Alle sichtbaren Fenster minimieren/wiederherstellen
- Ermitteln ob eine Exe-Datei läuft
- Auflisten aller Fenster
- Button klicken
- Beliebige Fenster minimieren, maximieren