2010-10-19 4 views
0

Quels types d'applications Windows peuvent recevoir des événements système? Je veux dire des événements comme fermée par l'utilisateur. Les formulaires Windows, les applications WPF et les services Windows peuvent le faire. Mais je ne suis au courant d'aucun autre.Quels types d'applications Windows peuvent recevoir des événements système?

+0

Quels types d'événements fermés? –

+0

Existe-t-il un type spécifique d'application Windows pour lequel vous essayez de piéger les événements système? –

+0

Je l'ai fait avec une application Windows Form et avec une application WPF. J'ai eu quelques problèmes avec la version de WPF sur Vista et avec la version de Windows Forms sur Win 7; mais c'est une autre histoire. Je voulais juste savoir si c'est possible avec (c.-à-d.) Une application console en C#? Merci –

Répondre

2

Les applications graphiques basées sur Windows Forms et WPF écoutent nativement certains événements Windows API. Ligne de commande et d'autres types peut s'abonner à ces événements, mais vous devez écrire ce code.

MISE À JOUR:

Voici un article sur la réception des événements de l'API Win32 à partir d'une application gérée:

http://www.codeproject.com/KB/cs/interopevents.aspx

Notez que l'application doit être en cours d'exécution pour recevoir les événements, donc si vous voulez Pour ce faire, à partir d'une application de console, votre application devrait démarrer et rester en fonctionnement jusqu'à ce qu'un signal externe provoque sa fermeture.

+0

Voulez-vous s'il vous plaît me guider vers un tutoriel ou quelque chose sur la façon dont cela peut-il être fait avec les applications de la console? Merci beaucoup! –

+0

+1 pour avoir fait les recherches de l'OP pour lui. –

+0

@Wonko_the_Sane Alors, quel genre de questions je devrais demander ici? Vous êtes si sûr de juger les gens comme vous le faites! Vous êtes un grand développeur! Félicitation! –

1

Obtenir des événements comme celui-ci nécessite une fenêtre et une boucle de message. La fenêtre est prise en charge par SystemEvents, la boucle de message est automatiquement présente dans une application WPF ou winforms.

Il est assez intelligent de créer un thread dédié si vous l'utilisez dans un autre type d'application, comme un service ou une application en mode console. Vous verrez ce thread dans le débogueur (Debug + Windows + Threads) avec le nom ".NET SystemEvents". Cela se produit lorsque votre application est exécutée sur un poste de travail Windows non interactif (comme les services) ou lorsque votre méthode Main n'a pas l'attribut [STAThread] (comme les applications de la console).

Rien de spécial n'est nécessaire dans votre code pour vous abonner à l'événement. Mais prenez garde que votre gestionnaire d'événements fonctionnera sur ce thread d'assistance, la synchronisation avec le mot-clé lock pourrait être nécessaire.

Questions connexes