2010-12-08 36 views
2

Je suis assez nouveau à l'API Windows et j'essaie de trouver les poignées de toutes les fenêtres qui apparaissent dans la barre des tâches.Obtenir les poignées de toutes les fenêtres dans la barre des tâches

Jusqu'à présent, j'ai réussi à:

  • Obtenez les poignées de toutes les fenêtres
  • Obtenez le titre d'une fenêtre
  • Vérifiez si une fenêtre est visible
  • Vérifiez si une fenêtre existe
  • Réduire une fenêtre
  • Obtenez les fenêtres enfants d'une fenêtre
  • Obtenez la fenêtre de bureau

J'ai essayé d'obtenir toutes les fenêtres enfants de la fenêtre de bureau, ce qui me donne près de 900 poignées de fenêtres! J'ai donc essayé de les filtrer, en obtenant seulement des fenêtres visibles et seulement des fenêtres dont le titre est plus long que 0 caractères, mais je suis encore loin - avec 68 fenêtres ??

Donc, un expert Win API pourrait m'éclairer sur la façon dont vous faites cela s'il vous plaît :-) et peut-être aussi expliquer pourquoi il y a tellement de fenêtres?

Edit:

private static bool HasAppWindowStyle(IntPtr handle) 
{ 
    return (GetWindowLong(handle, GWL_EXSTYLE) & WS_EX_APPWINDOW) != 0; 
} 
+1

Pourquoi '== 0' et pas'! = 0'. Je ne sais pas comment les valeurs de cette API sont définies, mais j'utiliserais intuitivement '! = 0' – CodesInChaos

+0

duplicata possible de [Quelle API dois-je utiliser pour savoir si une fenêtre est affichée dans la barre des tâches? ] (http://stackoverflow.com/questions/3484650/what-api-function-do-i-need-to-use-to-know-if-a-windows-is-beeing-shown-in-the- ta) – Anders

+0

@CodeInChaos: vous avez raison, merci. – Nobody

Répondre

1

L'algorithme exact n'est pas documenté, j'ai trouvé un pseudo code dans this answer qui fait un bon travail.

+0

Merci Anders. Je ne peux pas croire que ce n'est pas plus documenté ... Je veux dire, je pensais que ce serait une tâche commune. Je m'attendais même à une méthode API spécifique comme 'EnumTaskbarWindows' ou quelque chose comme ça. Je vais mettre à jour quand je trouve quelque chose qui fonctionne. – Nobody

+0

Je commençais à être confus parce que, pour une raison quelconque, la propriété 'get' de la propriété' Title' arrivait à expiration pour certaines fenêtres. Quoi qu'il en soit, cela fonctionne si j'obtiens le nom du processus parent à la place. Assez bien. – Nobody

2

Avez-vous vu FindWindowEx échantillon? Aussi, vous pouvez les filtrer pour avoir un texte, je pense que les fenêtres que vous voyez sont les éléments Desctop (je ne suis pas sûr), mais supprimer un élément du bureau et voir les changements.

1

Les indicateurs de style WS_VISIBLE et WS_EX_APPWINDOW sont activés pour les fenêtres de niveau supérieur que vous trouvez avec EnumWindows et qui ont des boutons de barre des tâches.

+0

exactement ce que j'étais après - merci! – Nobody

+0

Hans: Je reçois encore ~ ​​25 fenêtres, n'est-ce pas? J'ai seulement deux fenêtres dans ma barre des tâches. Certains d'entre eux ont des titres vides et je reçois aussi des fenêtres avec des titres comme 'Start' ... J'ai le même nombre de fenêtres quand je vérifie que chacune a le style d'appwindow comme quand je ne le fais pas (toutes les fenêtres qui ont le style visible, ont aussi le style appwindow?) J'ai posté ma méthode ci-dessus. – Nobody

+1

Non, ce n'est pas correct, l'algorithme est beaucoup plus compliqué que cela. – Anders