{Einheit UniqueInstance;/t/t/t/t/t/t/t}
{/t/t/t/t/t/t/t/t/t/t}
{Überprüfen Sie, ob die vorherige Anwendungsinstanz vorhanden ist, wenn ja, die vorherige/t}
{Instanz wird aktiv sein, und die aktuelle Instanz wird beendet./t}
{/t/t/t/t/t/t/t/t/t/t}
{geschrieben von Savetime, http://savetime.delphibbs.com 2004/6/27/T/T}
{/t/t/t/t/t/t/t/t/t/t}
{Verwendung:/t/t/t/t/t/t/t/t}
{Fügen Sie dieses Gerät in Ihr Delphi -Projekt hinzu, kein Job mehr zu tun./t}
{/t/t/t/t/t/t/t/t/t/t}
{Wichtig:/t/t/t/t/t/t/t/t/t}
{Sie dürfen die Projektlinie nicht entfernen: application.initialize;/t}
{/t/t/t/t/t/t/t/t/t/t}
{Notizen:/t/t/t/t/t/t/t/t}
{Diese Einheit identifiziert eine Anwendung mit dem Exe -Dateinamen von IT. Also, wenn du willst}
{Um einen anderen eindeutigen Anwendungsnamen anzugeben, müssen Sie den Wert ändern}}
{UniqueApplicationName in Schachprozessverfahren./t/t}
{/t/t/t/t/t/t/t/t/t/t}
Einheit UniqueInstance;
Schnittstelle
Verwendet Klassen, Systeme, Fenster, Formulare;
Durchführung
var
UniquemessageId: Uint;
Uniquemutexhandle: Thandle;
Vorheriges wndProc: tfnwndProc;
NextInitProc: Zeiger;
Funktion ApplicationWndProc (hwnd: hwnd; umsg: uint; wparam: wparam;
LPARAM: LPARAM): LRESULT; stdcall;
beginnen
// Hinweis: Verwenden Sie "<>" kann die Anwendungsgeschwindigkeit steigern.
Wenn Umsg <> uniquemessageId dann dann
Ergebnis: = CallWindowProc (Vorheriges wndProc, Hwnd, UMSG, WPARAM, LPARAM)
sonst beginnen
Wenn isiconisch (application.Handle) dann application.restore;
SetforecroundWindow (application.Handle);
Ergebnis: = 0;
Ende;
Ende;
Verfahren BringPreiviousInInstance Forground;
Const
BSMRecipients: DWORD = BSM_Applications;
beginnen
BroadcastSystemMessage (BSF_IGNORECURRENTTASK oder BSF_POSTMESSAGE,
@Bsmrecipients, uniquemessageId, 0, 0);
Halt;
Ende;
Verfahrensunterklasseanappellung;
beginnen
Vorheriges wndProc: = tfnwndproc (setWindowlong (application.handle, gwl_wndproc,
Integer (@ApplicationWndProc)));
Ende;
Prozedur CheckPreviousInInstance;
var
UniqueApplicationName: pchar;
beginnen
// eindeutiger Anwendungsname, Standardsatz für den Namen der EXE -Datei,
// Sie können es an sich ändern.
UniqueApplicationName: = pchar (extractFileName (application.exename));
// Eindeutige Nachrichten -ID registrieren
UniquemessageId: = RegisterWindowMessage (UniqueApplicationName);
// MUTEX -Objekt erstellen
Uniquemutexhandle: = CreateMutex (nil, falsch, uniqueApplicationName);
// MUTEX erstellen fehlgeschlagen, beenden Sie die Anwendung
Wenn Uniquemutexhandle = 0 dann
Halt
// Das gleiche benannte Mutex existiert die vorherige Instanz
Ansonsten, wenn GetLasterror = error_already_exists dann ist
BringPreiviousInInstance Forground
// Keine vorherige Instanz, Anwendungsfenster von Unterklassen
anders
Unterklasseanappelle;
// Nächste InitProc anrufen
wenn NextInitProc <> nil dann tProcedure (NextInitProc);
Ende;
Initialisierung
// muss InitProc verwenden, um die privious Instance zu überprüfen.
// Als Grund für die Anwendung ist nicht erstellt worden!
NextInitProc: = initproc;
Initproc: = @checkpreviousInstance;
Abschluss
// den Mutex -Handle schließen
Wenn Uniquemutexhandle <> 0, dann in CloseHandle (uniquemutexhandle);
Ende.