Savoir si une fenêtre (ou contrôle) est cachée

Signaler
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
-
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
-
Bonjour,

J'ai un programme qui analyse les fenêtres du bureau.

Lorsque j'installe Terminal Service à un moment je catch d'un coup toutes les fenêtres du wizard. Je fais un tri pour poubellisée les fenêtre "non visible" (avec GetWindowInfo et WS_VISIBLE) mais problèmes aucune des fenêtres n'est à l'état "hidden".
En fait elles sont toutes visibles et vu qu'elle sont supperposées,on n'en voit qu'une.

De manière général, y a-t-il un moyen (simple) de savoir si un contrôle est masqué par un autre.

Je vois que spy++ affiche bien la fenêtre visible (visuellement) et les fenêtres qui sont à l'état visible mais cachées sous celle-ci sont affichées grisée. Je me demande donc comment spy++ fait.

Merci

5 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Utilise IsWindowVisible().
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
Malheureusement non.


J'ai fait un programme de test MFC avec une Dialog dans la Dialog une FormView dans la FormView un bouton et un textbox.

Je fais un FormView.ShowWindow(false)
Et IsWindowVisible() du bouton et de la textbox retourne true.

Je trouve un peu lourd de faire un algo avec EnumChildWindow pour récupérer tous les controles et tester leur position et le ZOrder.
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Pour sure que ca ne marcheras pas cf. MSDN :
If the specified window, its parent window, its parent's parent window, and so forth, have the WS_VISIBLE style, the return value is nonzero. Otherwise, the return value is zero.



Shell
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Franchement, je ne comprends pas très bien le problème car, en principe, les controles ne devraient jamais se superposer.
Au lieu de EnumChildWindows() utilise FindWindowEx().
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
Bah, faut dire ça à Microsoft.
Visuellement je vous qq textes bouton et la progressbar. Et EnumChildWindows me trouve une centaine de fenêtre.
Donc il y a plein de fenêtre et ils mettent en 'bringtofront' celle qu'ils veulent.
C'est dégueulasse de méthode d'affichage mais c'est Microsoft.