![]() |
Doppelten Start eines Programmes verhindern
hi,
ich entwickle gerade eine applikation bei der ich nicht möchte das sie an einem rechner mehrmals gestartet werden kann... hier im forum hab ich folgende unit gefunden
Delphi-Quellcode:
so etwas ähnliches möchte ich jetzt auch in meinem programm einbinden...
unit NichtDoppeltStarten;
interface implementation uses windows,Dialogs,sysutils; var mHandle: THandle; // Mutexhandle Initialization mHandle := CreateMutex(nil,True,'xxxxx'); // 'xxxxx' Der Anwendungsname ist hier einzutragen if GetLastError = ERROR_ALREADY_EXISTS then begin // Anwendung läuft bereits {showMessage('Anwendung läuft bereits!!!!!');} // Wenn du deine Meldung willst, mach die Klammern weg Halt; end; finalization // ... und Schluß if mHandle <> 0 then CloseHandle(mHandle) end. {Dieter Hirt} und zwar soll die abfrage ob das programm schon läuft so früh wie möglich erfolgen!!! an welcher stelle muss ich da dann die abfragen einbauen??? im oncreate ereigniss meiner hauptform??? oder gehts noch früher??? |
Re: Doppelten Start eines Programmes verhindern
Steht doch da: ShowMessage(...), istnur auskommentiert.
|
Re: Doppelten Start eines Programmes verhindern
hi Andidreas,
pack deinen Quellcode in deine Projekt-Datei (*.dpr), noch bevor TMainForm (dein Hauptformular) erstellt wird... |
Re: Doppelten Start eines Programmes verhindern
Zitat:
Delphi-Quellcode:
vorbei und durchläuft das Coding
unit NichtDoppeltStarten;
Delphi-Quellcode:
automatisch. Das
Initialization
mHandle := CreateMutex(nil,True,'xxxxx'); // 'xxxxx' Der Anwendungsname ist hier einzutragen if GetLastError = ERROR_ALREADY_EXISTS then begin // Anwendung läuft bereits {showMessage('Anwendung läuft bereits!!!!!');} // Wenn du deine Meldung willst, mach die Klammern weg Halt; end;
Delphi-Quellcode:
sorgt dafür, das der Rest nicht mehr ausgeführt wird. Damit brauchst Du das Coding nirgendwo sonst aufzurufen (OnCreate o.ä.).
Halt;
Bitte noch das 'xxxxx' anpassen in einem möglichst unique-Namen Deines Programmes. Gruß, Christoph |
Re: Doppelten Start eines Programmes verhindern
Wäre es nicht besser, beim 2. Startversuch des Programmes zu dem bereits gestarteten zurückzukehren ? Genau an die Stelle, wo man in der ersten Instanz auch war ? Ich benutze dafür z.B. eine Semaphore und darüber ist hier genügend zu lesen.
P.S.: mir gefällt die Holzhammermethode mit dem halt; nicht! Das geht auch anders. |
Re: Doppelten Start eines Programmes verhindern
Hallo,
Du könntest über ![]() Ich bilde mir ein, dass ich hier ein Beispiel dazu geschrieben habe, finde es aber nicht. Eine gleichartige Lösung, die sehr gut ist, findest Du hier: ![]() Gruß Jürgen |
Re: Doppelten Start eines Programmes verhindern
Zitat:
Was aber gefällt Dir an dem Halt; nicht? Gruß, Christoph |
Re: Doppelten Start eines Programmes verhindern
Ich kenne mich da jetzt nicht 100%ig aus, aber es sollte doch auch ohne "Halt;" laufen indem du einfach überprüfst, OB es die 1. Instanz ist?
Delphi-Quellcode:
[delphi]-Tags vergessen :D
begin
if firstInstanz then begin ... Application.CreateForm(...); ... Application.Run; ... end; end; |
Re: Doppelten Start eines Programmes verhindern
Zitat:
Gruß, Christoph |
Re: Doppelten Start eines Programmes verhindern
Eine Funktion die einen Boolean zurückgibt:
Delphi-Quellcode:
Ich habe mich nicht damit auseinandergesetzt... Deshalb kann es sein, dass es so nicht geht, aber wenn es so geht, dann kann man so ein Halt; / Application.Terminate; umgehen!
function firstInstanz : Boolean;
begin // Überprüfen, ob dies die 1. Instanz ist, oder eine weitere... end; Nicht getestet:
Delphi-Quellcode:
program Project1;
uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.RES} var mHandle : THandle; begin mHandle := CreateMutex(Nil, True, 'TForm1'); if GetLastError <> ERROR_ALREADY_EXISTS then begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end; if mHandle <> 0 then CloseHandle(mHandle); end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz