J'ai trouvé comment empêcher la barre des tâches de faire clignoter une fenêtre cible nouvellement activée après avoir activé, agrandi et mis au point la fenêtre principale de ce processus à partir d'un autre processus. Tout d'abord, il existe de nombreuses restrictions quant à l'autorisation de cette opération.
"Le système limite les processus qui peuvent définir la fenêtre de premier plan. Un processus peut définir la fenêtre de premier plan uniquement si l'une des conditions suivantes est vraie :
- Le processus est le processus de premier plan.
- Le processus a été lancé par le processus d'avant-plan.
- Le processus a reçu le dernier événement d'entrée.
- Il n'y a pas de processus de premier plan.
- Le processus de premier plan est en cours de débogage.
- Le premier plan n'est pas verrouillé (voir LockSetForegroundWindow).
- Le délai de verrouillage du premier plan a expiré (voir SPI_GETFOREGROUNDLOCKTIMEOUT dans SystemParametersInfo).
- Aucun menu n'est actif.
<a href="https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-allowsetforegroundwindow" rel="nofollow noreferrer">https://docs.microsoft.com/en-us/Windows/desktop/api/winuser/nf-winuser-allowsetforegroundwindow</a>
Ainsi, si le contrôler est au premier plan, il peut temporairement activer un autre processus pour voler entièrement l'avant-plan en appelant AllowSetForegroundWindow avec le identifiant du processus du processus cible. Puis, après cela, le processus cible peut appeler SetForegroundWindow lui-même, en utilisant sa propre poignée de fenêtre, et cela fonctionnera.
Évidemment, cela nécessite une certaine coordination entre les deux processus, mais cela fonctionne, et si vous faites cela afin de mettre en œuvre une application mono-institutionnelle qui redirige tous les lancements de clics d'Explorer vers l'instance d'application existante, alors vous aurez déjà un tuyau (par exemple) nommé pour coordonner les choses de toute façon.