11
votes

Déterminer si une fenêtre a un bouton de la barre des tâches

Je cherche un moyen de vérifier si une fenêtre donnée a un bouton de la barre des tâches. C'est-à-dire, étant donné une poignée à une fenêtre, j'ai besoin d'un vrai si la fenêtre est dans la barre des tâches et de faux sinon.

Inversement, je me demande s'il y a un moyen d'obtenir une poignée à la fenêtre qui appartient à un bouton de barre de tâches donné, que je suppose qu'il faudrait un moyen d'énumérer à travers les boutons de la barre des tâches.

(le premier ancien est la partie dont j'ai besoin et la dernière partie est facultative.)

Merci beaucoup.


1 commentaires

Vous devriez accepter l'une des réponses ci-dessous. Les deux sont très bons.


3 Réponses :


11
votes

Windows utilise des heuristiques pour décider de donner ou non un bouton de la barre des tâches à une fenêtre, et il y a parfois un délai avant de pouvoir décider, le faisant de manière précise de 100% va être assez difficile. Voici un début approximatif sur les règles. Il y a des drapeaux de style moderne qui facilitent sa connaissance, mais lorsque ces styles manquent la barre des tâches est réduite à deviner.

Tout d'abord, vous aurez besoin des deux drapeaux de style de fenêtre. P>

LONG Style = GetWindowLong(hwnd, GWL_STYLE);
LONG ExStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
  • Si exstyle & ws_ex_appwindow code>, puis barre des tâches li>
  • Si exstyle & ws_ex_toolwindow code>, puis no_taskbar li>
  • Si style & ws_child code> alors no_taskbar li> ul>

    Le reste sont des suppositions: p>

    • style & ws_overlapped code> suggère la barre des tâches li>
    • style & ws_popup code> suggère not_taskbar surtout si getparent ()! = null code> li> li>
    • exstyle & ws_ex_overlapawindow code> suggère une barre de tâches li>
    • exstyle & ws_ex_clientedge code> suggère no_taskbar li>
    • exstyle & ws_ex_dlgmodalframe code> suggère no_taskbar li> ul>

      Je suis sûr qu'il existe d'autres règles pour deviner et que les règles de devinement ont changé de version à la version à Windows. P> P>


3 commentaires

Wow, on dirait que ceci est l'une de ces choses frustrantes qui se révèle ne pas être simples ... "deviner"? :( Merci pour les informations; Je vais lui donner un coup de chance ce soir.


Très bonne réponse. Je viens de l'utiliser dans mon application. Hors de curiosité, comment le saviez-vous?


Quelles que soient ces règles, une fenêtre apparaît également sur la barre des tâches s'il a été ajouté via le itastaskbarlist interface. AFAIK Il n'y a pas d'API pour vérifier si une fenêtre a été ajoutée à la barre des tâches de cette manière.



7
votes
  1. fenêtre de toplevel

  2. ws_ex_appwindow -> barre des tâches, quel que soit les autres styles!

  3. Le propriétaire doit être null (getwindow (fenêtre, gw_owner))

  4. n °: ws_ex_noactivate ou ws_ex_toolwindow:

    ordre est important.

    Deuxième question: Sous Windows XP / Vista, il était possible d'entrer dans le processus de la barre des tâches et d'obtenir toutes les images de fenêtre: xxx

    ceci pas possible avec Windows 7 plus. Donc, vous avez besoin de boucler sur toutes les fenêtres de Toplevel.


3 commentaires

Beau, merci pour les informations et le code supplémentaires. Je vais lui donner un coup de chance ce soir.


+1 pour l'exemple XP / Vista. Dans mon cas, j'avais besoin d'une application Quick-N-sale pour une utilisation exclusive XP, il a donc fonctionné super!


Quelles que soient ces règles, une fenêtre apparaît également sur la barre des tâches s'il a été ajouté via le itastaskbarlist interface. AFAIK Il n'y a pas d'API pour vérifier si une fenêtre a été ajoutée à la barre des tâches de cette manière.



1
votes

Ce MSDN L'article a de bonnes informations sur quand et pourquoi la coquille décide de créer un bouton de la barre des tâches pour une fenêtre:

La coque crée un bouton de la barre des tâches chaque fois qu'une application crée une fenêtre qui ne possède pas. Pour vous assurer que le bouton de la fenêtre est placé dans la barre des tâches, créez une fenêtre évidente avec le style étendu WS_EX_AppWindow. Pour empêcher le bouton de la fenêtre d'être placé dans la barre des tâches, créez la fenêtre évidente avec le style WS_EX_TOOLWINDOW. Comme alternative, vous pouvez créer une fenêtre cachée et créer cette fenêtre cachée le propriétaire de votre fenêtre visible.


0 commentaires