Eine andere Möglichkeit wäre noch, wenn du das mit GlobalAddAtom machen würdest. Der ganz große Nachteil an der Geschichte wäre aber, das wenn dein Programm abschmiert oder vom Benutzer abgeschossen wird, das GlobalDeleteAtom nicht ausgeführt wird. Und der Benutzer das Programm erst nach einem Neustart von Windows wieder benutzen kann.
Delphi-Quellcode:
var
MyAtom: ATOM;
initialization
MyAtom := GlobalFindAtom('{03D1CB1A-5C2C-4B0D-9311-F585653FF733}');
if MyAtom <> 0 then
begin
MessageBox(0, 'Programm läuft bereits.', nil, MB_OK or MB_ICONEXCLAMATION);
MyAtom := 0;
Halt(0);
end else
MyAtom := GlobalAddAtom('{03D1CB1A-5C2C-4B0D-9311-F585653FF733}');
finalization
if MyAtom <> 0 then
GlobalDeleteAtom(MyAtom);
end.