Doppelstart verhindern.
- 
				Mathias
 - Beiträge: 7090
 - Registriert: Do 2. Jan 2014, 17:21
 - OS, Lazarus, FPC: Linux (die neusten Trunk)
 - CPU-Target: 64Bit
 - Wohnort: Schweiz
 
Doppelstart verhindern.
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 ?
			
			
									
									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
						Mit Java und C/C++ sehe ich rot
- 
				creed steiger
 - Beiträge: 958
 - Registriert: Mo 11. Sep 2006, 22:56
 
Re: Doppelstart verhindern.
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...
			
			
									
									
						(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: 7090
 - Registriert: Do 2. Jan 2014, 17:21
 - OS, Lazarus, FPC: Linux (die neusten Trunk)
 - CPU-Target: 64Bit
 - Wohnort: Schweiz
 
Re: Doppelstart verhindern.
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
						Mit Java und C/C++ sehe ich rot
Re: Doppelstart verhindern.
Nur als Ergänzung. Man könnte das Ganze auch per SimpleIPC (http://www.freepascal.org/docs-html/3.0 ... leipc.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;  Re: Doppelstart verhindern.
Ich hab' noch 'ne andere Version gefunden:...
Die scheint neuer zu sein, hab' sie aber noch nicht ausprobiert...
			
							Die scheint neuer zu sein, hab' sie aber noch nicht ausprobiert...
- Dateianhänge
 - 
			
		
		
				
 UniqueInstance V5.rar- (15.07 KiB) 128-mal heruntergeladen
 
 
- 
				Mathias
 - Beiträge: 7090
 - Registriert: Do 2. Jan 2014, 17:21
 - OS, Lazarus, FPC: Linux (die neusten Trunk)
 - CPU-Target: 64Bit
 - Wohnort: Schweiz
 
Re: Doppelstart verhindern.
Hast du diese aus der Zukunft geholt ?Die scheint neuer zu sein, hab' sie aber noch nicht ausprobiert...
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
						Mit Java und C/C++ sehe ich rot