From d41dbfbb3af9ec79527179b42b4743024c9bd1bd Mon Sep 17 00:00:00 2001 From: r-zakarya <82443831+r-zakarya@users.noreply.github.com> Date: Thu, 17 Sep 2026 06:20:17 +0100 Subject: [PATCH] fix(tray): relancer l'exe ramene bien la fenetre au premier plan Lancee, fermee par la croix (tray), puis relancee : la fenetre revenait derriere les autres, seule son icone dans la barre des taches. Mesure : visible, non minimisee, pas au premier plan. La 2e instance, qui recoit le double-clic, reveille la 1re par un message ; mais la 1re n'a recu aucune entree, et Windows lui refuse SetForegroundWindow. La 2e cede maintenant son droit (AllowSetForegroundWindow) avant d'envoyer le message. Co-Authored-By: Claude Opus 5 --- delphi-backend/Source/PM.SingleInstance.pas | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/delphi-backend/Source/PM.SingleInstance.pas b/delphi-backend/Source/PM.SingleInstance.pas index d372450..69606fc 100644 --- a/delphi-backend/Source/PM.SingleInstance.pas +++ b/delphi-backend/Source/PM.SingleInstance.pas @@ -69,6 +69,15 @@ begin CloseHandle(_Mutex); _Mutex := 0; end; + // CEDER LE PREMIER PLAN AVANT DE REVEILLER L'AUTRE. C'est NOUS qui venons de + // recevoir le double-clic de l'utilisateur, donc nous seuls avons le droit de + // passer devant. Sans cette cession, l'instance deja lancee — qui n'a recu + // aucune entree — se voit refuser SetForegroundWindow par Windows : sa + // fenetre se montre DERRIERE les autres, avec seulement son icone dans la + // barre des taches. Mesure avant correctif : visible, non minimisee, pas au + // premier plan. Tous processus parce que le PID de l'autre instance n'est pas connu + // ici ; le droit cede expire a la prochaine entree utilisateur. + AllowSetForegroundWindow(DWORD(-1)); // ASFW_ANY, absent de Winapi.Windows PostMessage(HWND_BROADCAST, WM_PMShowMessage, 0, 0); Result := False; end;