Un moyen de créer une face cachée de la fenêtre principale en C#?
Je veux juste une application en c# avec une cachée de la fenêtre principale qui permettra de traiter et de répondre à des messages de fenêtre.
Je peux créer un formulaire sans la montrer, et peut en appeler de l'Application.Run() sans passer dans un formulaire, mais comment puis-je brancher le formulaire créé dans la boucle de message?
Est-il une autre façon d'aller à ce sujet?
Merci d'avance pour les conseils!
Vous devez vous connecter pour publier un commentaire.
Excellent! Ce lien m'a orienté dans la bonne direction. Cela semble fonctionner:
De le garder dans les Alt-Tab, vous avez besoin d'une fenêtre de l'outil. Malheureusement, cela l'empêche de départ réduite. Mais le réglage de la position de départ de Manuel et à le positionner à l'écran est le tour est joué!
Dans le processus de ré-écriture d'un VC++ barre des tâches Application en C# .NET, j'ai trouvé la méthode suivante vraiment pratique pour atteindre les objectifs suivants.
Étapes que j'ai suivies:
Je sais que c'est une vieille question, mais il figure en bonne position sur google, je vais donc vous donner ma solution de toute façon.
Je fais deux choses:
Le meilleur moyen est d'utiliser les éléments suivants 1-2 lignes dans le constuctor:
Vous pouvez même définir la Minimisé la propriété dans le VS fenêtre de Propriété.
Vous pouvez créer une classe qui hérite de
System.Windows.Forms.NativeWindow
(qui fournit de la boucle de message de la capacité) et de référence de laHandle
bien dans son constructeur pour créer sa poignée et crochet dans la boucle de message. Une fois que vous appelezApplication.Run
, vous serez en mesure de traiter des messages de lui.J'ai résolu le problème comme ceci:
Ce code réside dans le Programme.cs fichier, et vous pouvez voir l'original de la Demande.Exécution d'un appel de méthode en commentaire. Je viens de créer une classe Principale de l'objet (mon formulaire principal de la classe, est nommé Principal) et démarrer l'application à la boucle de message w/o de tous les paramètres. Cela démarre l'application, initialise tous les éléments de formulaires, mais n'affiche pas le formulaire.
Remarque: vous devez avoir une méthode pour obtenir votre fenêtre d'affichage (comme icône de plateau de système, raccourci clavier ou de la minuterie ou tout ce que vous aimeriez).
Pourquoi ne pouvez-vous pas simplement transmettre le formulaire lorsque vous appelez
Application.Run
? Étant donné que c'est clairement un appel bloquant, sur quel événement vous voulez montrer la forme? Juste appelerform.Show()
devrait être suffisant.À l'aide de Kami réponse comme une source d'inspiration, j'ai créé une information plus complète sur concept. Si vous utilisez cette solution, ne jamais montrer la fenêtre masquée. Si vous le faites, l'utilisateur peut fermer et vous avez perdu la capacité de contrôler la fermeture de l'application d'une manière ordonnée. Cette approche peut être utilisée pour gérer une Minuterie, NotifyIcon, ou tout autre élément qu'il est heureux de vivre sur une forme invisible.
dans le code de Form1 fichier ajouter ce.Visible = false; pour le constructeur.
Cela permet de masquer la fenêtre, mais il clignote pendant une seconde avant, il est caché. Alternativement, vous pouvez écrire votre propre Application.Exécuter la commande.
pour plus d'info http://social.msdn.microsoft.com/forums/en-US/winforms/thread/dece45c8-9076-497e-9414-8cd9b34f572f/
aussi, vous souhaiterez peut-être définir le ce.ShowInTaskbar à false.
Vous devriez regarder lors de la création d'un "service" comme c'est une demande sans forme.
Voir http://support.microsoft.com/kb/816169