Hauptmenü
Home
Delphi
C# / .NET
Freepascal
Firebird
OPF
Tutorials
Tipps und Tricks
Links
Suche
Impressum
Anwendung darf nur einmal gestartet werden PDF E-Mail
Geschrieben von Lemmy   
Montag, 23. Januar 2006

Manchmal möchte man nicht, dass das selbst erstellte Programm mehrmals gestartet werden kann, denn zum einen sieht es nicht unbedingt schön aus, wenn die Taskleiste voll mit der gleichen Anwendung ist, andererseits können auch Probleme entstehen, wenn mehrere gleiche Programme auf die selben Resourcen (Dateien, Speicherbereiche, Geräte, ...) zugreifen.
Man kann nun veranlassen, dass das eigene Programm beim Start prüft, ob das selbe bereits läuft. Ist das der Fall, dann wird das 2. (gleiche) Programm gar nicht erst zu Ende gestartet, sondern wieder beendet.
Im folgenden Beispiel wird ein sog. Mutex verwendet, damit Windows dein Programm identifizieren kann. Wird bei einem 2. Startversuch dann ein Mutex mit dem gleichen Namen verwendet, lässt Windows dies nicht zu und das Programm wird nicht geladen.
Durchführung:
Lass über das Menü: Ansicht > Units (oder STRG+F12) den Quelltext des Projektes anzeigen und verändere ihn, dass er dem folgenden entspricht. Allerdings solltest du die vorhandenen Namen der Forms beibehalten:

program Project1;
uses Forms,Windows,
Unit1 in 'Unit1.pas' {Form1};
//-->hier stehen deine Namen der Forms bzw. Units {$R *.RES}
const
  MutexName = 'Mein Programm';
//-->quasi der Name, unter dem Windows dein Programm anspricht
var
  hMutex: THandle; begin
  hMutex := CreateMutex(NIL, True, MutexName);
//-->Versuch, dem Programm den obigen Mutex zuzuweisen
  if (hMutex = 0) OR (GetLastError = ERROR_ALREADY_EXISTS) then
  begin
    CloseHandle(hMutex);
    halt;
  end;
//hat es nicht geklappt, dann wird das Programm
//gar nicht erst initialisiert (also nicht gestartet)

  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
  CloseHandle(hMutex);
end.

Letzte Aktualisierung ( Sonntag, 19. Februar 2006 )
 
< Zurück