Mehrfaches Starten einer Anwendung verhindern (Splash-Screen, wiederherstellen)(Tipp drucken)
Um das Programm über die IDE zu starten, müssen Sie den den Fensternamen
entfernen oder die Unit mit dem Hauptformular schließen. Ansonsten wird das Programm
wieder beendet. Der Grund liegt darin, das Delphi selbst ein Fenster dieses Namens im
Formular-Designer geöffnet hat.
Weiterhin kann ein Splash-Screen (FormName = frmSplash) angezeigt werden.
Um zu einem bereits laufendes Programm zu wechseln, muss es ausfindig gemacht werden und je nach aktueller
Darstellung aktiviert werden.
program Project1;
uses
Windows, // Unit einfügen
Forms,
Unit1 in 'Unit1.pas' {Form12};
{$R *.RES}
var
Mutex: THandle;
procedure CheckForPreviousInstance;
var
PrevWnd, PrevWndIDE: HWnd;
begin
// Der Name Project1 muss systemweit eindeutig sein
Mutex := CreateMutex(nil, false, 'Project1');
if WaitForSingleObject(Mutex, 10000) = WAIT_TIMEOUT then
Halt;
// Um zum bereits laufenden Programm zu wechseln ...
// Klassenname des Hauptformulars, gegebenenfalls zum Testen leer lassen ''
PrevWnd := FindWindow('TForm12', nil);
if PrevWnd <> 0 then
PrevWnd := GetWindow(PrevWnd, GW_OWNER);
if PrevWnd <> 0 then
begin
if not IsWindowVisible(PrevWnd) then
exit;
if IsIconic(PrevWnd) then
ShowWindow(PrevWnd, SW_SHOWNORMAL)
else
SetForegroundWindow(PrevWnd);
Halt;
end;
end;
begin
Application.Initialize;
try
CheckForPreviousInstance;
// Show SplashScreen anzeigen ...
// frmSplash := TfrmSplash.Create(nil);
// frmSplash.Show;
// frmSplash.Update;
// frmSplash.Refresh;
Application.CreateForm(TForm12, Form12);
finally
ReleaseMutex(Mutex);
CloseHandle(Mutex);
end;
// close SplashScreen
// frmSplash.Close;
// frmSplash.Free;
Application.Run;
end.