Restaurer le focus de la fenêtre sur le propriétaire précédent

J’ai une application qui se trouve dans la barre des tâches et qui, lorsque vous double-cliquez dessus, ouvre une fenêtre assez standard. Cependant, lorsque vous fermez la fenêtre, j’aime que la fenêtre qui était focalisée avant que la mienne soit ouverte soit redirigée.

Si je place ma fenêtre par un raccourci clavier, je peux restaurer le focus précédent à l’aide de l’ GetForegroundWindow API GetForegroundWindow avant que ma fenêtre ne s’affiche, puis la méthode SetForegroundWindow après la fermeture de ma fenêtre (avec la valeur du premier appel) pour restaurer la mise au point. Cela ne fonctionne pas lorsque vous ouvrez puis ouvrez une fenêtre dans la barre d’état système, car l’utilisateur a essentiellement effectué le focus de la barre d’état système.

J’ai essayé d’utiliser une combinaison de GetForegroundWindow , GetWindow et GetTopMostWindow pour essayer de naviguer dans l’ordre z afin de trouver la deuxième fenêtre après la barre d’état système (en supposant que la barre d’état système a sauté en haut, logiquement le suivant serait le front original). Je n’ai pas eu de succès cependant, les résultats de ces fonctions sont plutôt inutiles car ils ne semblent pas me donner de structure logique.

Est-ce que quelqu’un a des idées sur la façon dont je pourrais y parvenir?

J’avais pensé à une sorte d’observateur d’arrière-plan, qui s’assoit et surveille simplement la fenêtre avant et stocke un pointeur vers celui-ci, mais cela ne sera au mieux que flou.

Ceci est sous Windows (je suis personnellement sur x64 Server 2008) et avec .Net 3.5.

Bien que cela puisse être une fonctionnalité conviviale, vous savez probablement qu’avec Windows 7, la barre des tâches occupera une place (beaucoup) moins importante sur le bureau.

La seule façon de procéder est de surveiller les messages Windows et de savoir quelle fenêtre a été mise en évidence avant que l’application ait le focus. A part ça, il n’y a pas grand chose à faire.

Je l’ai fait pour revenir à la fenêtre précédente

 SendKeys.Send("%{TAB}"); 

Je sais que ce n’est pas la solution, mais qu’elle sert le but dans une certaine mesure.

J’ai jeté un coup d’oeil à toutes les icons de la barre d’état système et elles ont le même comportement que votre programme. Messing avec Windows La gestion de focus est velue, vous voudrez peut-être réfléchir à deux fois (ou plus) avant d’essayer de changer le comportement standard.