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 <noreply@anthropic.com>
This commit is contained in:
@@ -69,6 +69,15 @@ begin
|
|||||||
CloseHandle(_Mutex);
|
CloseHandle(_Mutex);
|
||||||
_Mutex := 0;
|
_Mutex := 0;
|
||||||
end;
|
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);
|
PostMessage(HWND_BROADCAST, WM_PMShowMessage, 0, 0);
|
||||||
Result := False;
|
Result := False;
|
||||||
end;
|
end;
|
||||||
|
|||||||
Reference in New Issue
Block a user