Ich mache es schon seit Jahren so - zum Beispiel in der
DPR-Datei des Projekts:
Delphi-Quellcode:
var
hExistingInstance: THandle;
aHandle: THandle;
const
sUniqueMutexID:
String = '
irgendeineuniquemutexid';
begin
// Prüfen, ob das Fenster existiert. Wenn ja, kann man ja bei ".............." mit SendMessage Nachrichten an das Fenster senden o.ä.
hExistingInstance := FindWindow('
TMeinProgrammOderSo',
nil);
// Fenster scheint zu existieren...
if hExistingInstance <> 0
then
begin
// ..............
Halt(1);
end;
// Wenn das Fenster nicht existiert, nur dann einen Mutex erstellen
aHandle := CreateMutex(
nil, False, PWideChar(sUniqueMutexID));
// Und wenn auch das schief gehen sollte.... abbrechen
if GetLastError = ERROR_ALREADY_EXISTS
then
begin
CloseHandle(aHandle);
Halt(1);
end;
end;
Man wird mich für diesen Code köpfen. Aber er funktioniert seit Jahren auf den unterschiedlichsten System vollkommen einwandfrei.