Ich mache das so ähnlich, nur mit einigen kleinen Unterschieden:
Delphi-Quellcode:
LimitInstancesMsg:= RegisterWindowMessage(PChar('LimitInstanceMessage.' + PRODUCTNAME));
hMutex:= CreateMutex(nil, True, PRODUCTNAME + PRODUCTNAME + PRODUCTCOPYRIGHT);
if GetLastError = ERROR_ALREADY_EXISTS then
begin
SendMessage(HWND_BROADCAST, LimitInstancesMsg, 0, 0);
Exit;
end;
Prinzipiell hat aber SendMessage, gerade bei einem Broadcast, das Problem, dass es erst zurückkehrt, wenn alle Fenster die Nachricht empfangen und verarbeitet haben (wie auch in meinem Code). Mögliche Lösungen: PostMessage statt SendMessage benutzen oder Fenster aller eigenen Instanzen suchen und die Message nur an diese senden.
MfG Dalai