2009-07-15 2 views
0

J'utilise le code ci-dessous pour capturer les raccourcis clavier ctrl + alt + Q, ce qui fonctionne parfaitement. Mais, je veux l'utiliser dans une application en arrière-plan. Puisque mon application n'a aucun formulaire, je veux utiliser le même code dans un fichier de classe.Capture des raccourcis clavier à partir d'un thread à l'aide de C#;

Je suis confus, parce que je ne peux pas écrire un gestionnaire d'événement [keypressed] dans le fichier de classe. Au lieu de cela, je veux utiliser la touche dans le fil.

Aidez-nous s'il vous plaît.

public DialogResult Result; 
    KeyboardHook hook = new KeyboardHook(); 
    public Form1() 
    { 
     InitializeComponent(); 
     // register the event that is fired after the key press. 
     hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(hook_KeyPressed); 
     // register the control + alt + F12 combination as hot key. 
     hook.RegisterHotKey((ModifierKeys)2 | (ModifierKeys)1, Keys.Q); 
    } 

    void hook_KeyPressed(object sender, KeyPressedEventArgs e) 
    { 

     Result = MessageBox.Show("Are you sure, you want to log off?","Log off" 
       ,MessageBoxButtons.YesNo 
       ,MessageBoxIcon.Warning); 

     if (Result == DialogResult.Yes) 
     { 

     } 
     else 
     { 

     } 
    } 

Répondre

2

Si vous voulez capturer un raccourci global sans un formulaire, je crains que vous ne pouvez pas.

La raison est que les raccourcis clavier globaux sont envoyés à une poignée de fenêtre (et traitées WNDPROC, alias. La pompe de message)

Donc, fondamentalement la façon dont Windows fonctionne, vous ne pouvez pas utiliser les raccourcis clavier globaux sans un formulaire pour les recevoir .

Je ne suis pas entièrement certain que c'est ce que vous voulez faire cependant. Mais d'un autre côté, il n'y aura pas non plus de raccourcis locaux sans formulaire, donc je ne vois pas ce que ça pourrait être.

Vous voudrez peut-être clarifier un peu votre question un peu (pas d'infraction)

+0

D'accord, je vais le faire en utilisant un formulaire. Mais est-il possible de rendre le formulaire invisible, il ne devrait même pas être dans la barre des tâches. Possible? Merci. – Anuya

+0

Oui, possible. Je capture le raccourci pendant que mon application est invisible et l'amène devant. –

+0

J'utilise ce qui suit, mais je reçois toujours le formulaire. private void InitializeComponent() { this.SuspendLayout(); // // Formulaire 1 // this.Visible = false; this.ShowInTaskbar = false; } – Anuya

Questions connexes