ich tipp jetzt einfach mal drauf, daß Anwendungen mit einem höcheren "Wert" noch ein
Handle auf tiefere
Mutex haben
, welche natürlich beim beenden der Programme von Windows dann freigegeben werden. (schön, daß Windows jetzt aufräumt ... unter
Win9x hättest du da viel Spaß)
> evnetuell OpenMutex
du solltest auch die Schleife verlassen, wenn du was gefunden hast und das mit OpenMutex geöffnete auch wieder schließen
Delphi-Quellcode:
for i := 0 to sl.Count-1 do
begin
if openmutex(MUTEX_ALL_ACCESS, False, (PChar(sl[i])))=0
then begin
mutex_x:= sl[i];
break; <<<
end;
end;
aber eigentlich brauchst du nur mit CreateMutex alle Möglichkeiten durchprobieren und wenn nichts frei war, dann beenden.
Delphi-Quellcode:
Const mutex:
Array[0..4]
of String = (
'
Global\{03D1CB1A-5C2C-4B0D-9311-F585653FF735}',
'
Global\{03D1CB1A-5C2C-4B0D-9311-F585653FF733}',
'
Global\{03D1CB1A-5C2C-4B0D-9311-F585653FF734}',
'
Global\{03D1CB1A-5C2C-4B0D-9311-F585653FF732}',
'
Global\{03D1CB1A-5C2C-4B0D-9311-F585653FF731}');
Initialization
For i := 0
to High(
mutex)
do Begin
mH := CreateMutex(
nil, True, PChar(mutex_x));
If mH <> 0
Then Break;
End;
If mH = 0
Then Begin
MessageBox(0, PChar(MSG004),
nil, MB_OK
or MB_ICONEXCLAMATION);
Halt(0);
End;
Finalization
If mH <> 0
Then ReleaseMutex(mH);
End.