Hallo,
ich nutze die folgende
Unit um einen doppelten Programmstart zu verhindern:
Delphi-Quellcode:
unit CopyVertragRunOnce;
interface
implementation
uses windows, Dialogs, sysutils, Forms;
var mHandle: THandle;
// Mutexhandle
Initialization
mHandle := CreateMutex(
nil, True, PChar(Application.Title));
// '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
ReleaseMutex(mHandle);
end.
{Dieter Hirt}
Ich möchte jetzt aber nicht eine Meldung auf den Bildschirm bekommen. Stattdessen soll die Instanz des Programmes, die schon läuft in den Vordergrund gehoben werden. Ich kann dies mit den
API-Funktionen SetForegroundWindow oder BringWindowToTop erreichen. Beide benötigen jedoch das Fensterhandle. Gibt es eine Möglichkeit aus dem
Mutex irgendwie das Fensterhandle zu ermitteln oder muß ich FindWindow verwenden?