Einzelnen Beitrag anzeigen

matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#3

Re: Mehrfachstart einer .exe verhindern

  Alt 26. Apr 2007, 11:19
Den Link fand ich auch nimmer aber ich kopier mir immer interessante Sachen in Textdateien

das hatte hier mal Lemmy geschrieben

Zitat:
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:
Delphi-Quellcode:
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.
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat