Doppelstart verhindern.

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Doppelstart verhindern.

Beitrag von Mathias »

Wie kann ich verhindern, da ein Programm doppelt gestartet wird.
Ich denke unter Windows könnte man dies mit FindWindow lösen.

Gibt es dafür auch etwas Platformübergreifendes ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Re: Doppelstart verhindern.

Beitrag von creed steiger »


SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Doppelstart verhindern.

Beitrag von SoE »

Unter Windows macht man das eigentlich so:
(wobei es unter Windows mehrere gut funktionierende Möglichkeiten gibt.)
btw: Über UniqueInstance hab' ich bisher nur Gutes gehört...

Code: Alles auswählen

 
 CONST
  MutexName = 'MeinProgramm MuTeX';
 
 VAR
  hMutex: THandle;
 
Begin
 Try
  hMutex:= CreateMutex(Nil, True, MutexName);
 
   If (hMutex = 0) Or (GetLastError = ERROR_ALREADY_EXISTS)
   Then Exit;
 
  Try
   Application.Initialize;
   Application.CreateForm(TForm1, Form1);
   Application.Run;
  Finally
   If hMutex <> 0
   Then CloseHandle(hMutex);
  End;
 Except
  // LOG...
 End;
End.
 

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Doppelstart verhindern.

Beitrag von Mathias »

creed steiger hat geschrieben:http://wiki.freepascal.org/UniqueInstance

sollte helfen denke ich

Danke, dies scheint recht gut zu funktionieren.
Was noch ein Tüpfchen auf dem i wäre, wen es das schon gestartet in den Vordergrund holen würde.

Die Anleitung gibt es sogar in deutsch: http://wiki.lazarus.freepascal.org/UniqueInstance/de
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Doppelstart verhindern.

Beitrag von Michl »

Nur als Ergänzung. Man könnte das Ganze auch per SimpleIPC (http://www.freepascal.org/docs-html/3.0.0/fcl/simpleipc/tsimpleipc.html) lösen. Damit kann man verschiedene zusätzliche Kommandos einpflegen.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Doppelstart verhindern.

Beitrag von SoE »

Ich hab' noch 'ne andere Version gefunden:...
Die scheint neuer zu sein, hab' sie aber noch nicht ausprobiert...
Dateianhänge
UniqueInstance V5.rar
(15.07 KiB) 78-mal heruntergeladen

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Doppelstart verhindern.

Beitrag von Mathias »

Die scheint neuer zu sein, hab' sie aber noch nicht ausprobiert...

Hast du diese aus der Zukunft geholt ?
Alles Jahrgang 2035.

Die Dateien scheine alle gleich gross zu sein, wie im obigen Link.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten