2010-04-15 5 views
0

J'ai commencé à programmer un service Windows. J'ai ajouté une icône de notification dans la boîte à outils. Il a la petite icône de notification qui apparaît dans le systray en tant que membre de ces icônes.Programmation d'un service Windows

Cela fonctionne jusqu'à maintenant.

Jusqu'à présent, j'ai un formulaire vierge. J'ai utilisé le DoubleClick pour le notifyIcon pour afficher le formulaire (j'utiliserai le formulaire pour quelque chose plus tard).

Maintenant, j'ai une liste de choses que je veux accomplir pour que cela fonctionne comme un vrai service Windows . Tout d'abord, si possible, je voudrais supprimer le bouton maximiser et annuler sur le formulaire. La plupart des applications de service Windos que j'ai vues offrent la possibilité de fermer l'application en cliquant avec le bouton droit de la souris sur l'icône Notifier qui affiche un menu d'options.

Je vois dans les propriétés du formulaire sous Misc il y a un CancelButton. Mais je ne vois pas comment le désactiver. Dans les propriétés du forum je vois sous le style de fenêtre il y a une option de ControlBox qui, si je tourne à faux, tous les trois boutons, (minimisent, maximisent et annulent) disparaissent.

Ce ne sont pas ce que je cherche. Je ne voudrais pas l'option pour eux de redimensionner, agrandir ou fermer le formulaire ici. Je soupçonne que les gens vont fermer la boîte avec l'intention de faire disparaître la boîte tout en voulant que l'application fonctionne.

Sous la légende "Focus" dans Propriétés, il y a "Désactiver". J'ai créé mon propre événement/méthode/fonction pour cela et dans le débogage j'ai remarqué que lorsque vous cliquez sur le x-box dans le coin supérieur droit, cette fonction est appelée. Le problème est que, après la fonction est terminée, l'application se ferme quand même. Comment contourner cette fonction? Deuxièmement, comment attraper l'événement de clic droit sur l'icône de notification dans le systray ?

Je peux voir comment créer des événements pour "Click" et "MouseClick" etc. mais comment puis-je déterminer quel bouton a été cliqué? En utilisant le bouton de droite, vous pouvez voir quand ces programmes savent quand ouvrir un menu. Donc, je voudrais savoir comment faire aussi bien.

+1

Ceci n'est pas une question, ceci est une proposition de projet. –

+0

Je déteste absolument toutes les applications qui pensent que «minimiser au plateau» est une bonne idée, et qui me font passer par des cerceaux et des obstacles pour obtenir la chose damnée de mon écran. Vos utilisateurs seront d'accord. Quelle est la prochaine étape, en ajoutant une tâche planifiée qui s'assure qu'elle peut vérifier les mises à jour? (Google is Evil) – tsilb

+0

Mes utilisateurs veulent ça. – xarzu

Répondre

4

Les services Windows ne doivent pas afficher les icônes de notification ni afficher les formulaires. Vous découvrirez très vite que Vista leur interdit explicitement de le faire.

Vous devez diviser votre application dans un programme utilisateur qui peut afficher une icône dans la zone de notification et afficher les formulaires et le service. Ils doivent être des processus distincts et communiquer via IPC (mémoire partagée, canaux nommés, sockets, etc.).

Quant à la façon de réagir à un Righ-cliquez sur la question de l'icône de notification, il vous suffit d'attribuer quelque chose dans votre concepteur à la propriété ContextMenu:

Le menu est affiché lorsque l'utilisateur droite clique sur une icône dans la zone de notification de la barre des tâches. Les menus contextuels sont également appelés menus contextuels .

1

Les services Windows standard ne fonctionnent avec aucune interface utilisateur. De manière générale, votre type de projet de service Windows dans Visual Studio ne contient aucun composant d'interface utilisateur.

Les interfaces utilisateur que vous voyez lorsque vous travaillez avec d'autres services sont des applications secondaires conçues pour gérer ces services. Ceux-ci peuvent s'exécuter dans la zone de notification système («bac») ou peuvent fonctionner en tant que fenêtres réduites, peuvent être des composants logiciels enfichables MMC ou peuvent être des applications distinctes lancées par l'administrateur de manière ad hoc. Par exemple, SQL Server s'exécute en tant que service, que Management Studio ou l'une des autres applications d'interface utilisateur auxiliaire soient en cours d'exécution ou non.

Dans tous les cas, l'interface utilisateur "composant" d'un service doit être une application entièrement distincte. Ceci est particulièrement important dans le monde post-Vista, pour les raisons citées par Remus Rusanu. Vous allez créer un projet WinForms distinct pour cela, et lui demander d'envoyer des messages au service à contrôler.(Cela peut inclure les fonctions de base telles que démarrer, arrêter et redémarrer, mais également d'autres commandes spécifiques au service.)

Vous pouvez lire les autres questions suivantes sur StackOverflow pour obtenir des conseils sur le service Windows standard./interface utilisateur modèle d'application d'aide: