2009-12-22 4 views
1

Y a-t-il moyen en C# d'ajouter globalement un élément de menu à tous les menus du système sur toutes les fenêtres actives? Peut-être sous la commande "Maximiser"?Modification des menus du système global

+2

Si votre conception vous oblige à le faire, vous devez repenser votre conception. –

+0

J'essaye d'écrire un programme qui me permettra d'épingler n'importe quelle fenêtre afin qu'elle soit toujours au-dessus de toutes les autres fenêtres. – Icemanind

+1

Que se passe-t-il si l'utilisateur a une autre application qui utilise la même technique que celle utilisée pour mettre une fenêtre au-dessus, qui gagne? – BFree

Répondre

4

Cela ne peut pas être fait en code managé. Et il serait remarquablement difficile même dans le code non-configuré. Fondamentalement, vous devez injecter votre code dans chaque processus, puis insérer des éléments dans les menus du système local, puis raccorder la fenêtre principale proc pour intercepter les messages WM_SYSCOMMAND afin que vous puissiez faire les éléments de menu faire quelque chose.

Vous pouvez écrire du code qui ajoutera le style WS_TOPMOST à ​​(la plupart) des fenêtres (si la sécurité le permet) simplement en utilisant FindWindow pour obtenir le handle de la fenêtre, puis SetWindowLong pour changer le style de la fenêtre.

Mais vous ne serez pas en mesure de mettre l'interface utilisateur pour cela dans les menus système d'autres processus.

+0

Merci pour la réponse John. Donc, la meilleure façon d'y arriver est d'écrire quelque chose comme Spy ++ qui vous permet de "sélectionner" une fenêtre, puis utiliser SetWindowLong sur cette fenêtre pour changer le style de la fenêtre? – Icemanind

+0

oui, ce serait le chemin. –

+0

Une manière élégante de faire ceci sans injection de code est décrite à http://stackoverflow.com/q/138616/103167 –

Questions connexes