2009-07-15 94 views
0

我使用下面的代码来捕获完美的ctrl + alt + Q热键。 但是,我想在后台应用程序中使用它。由于我的应用程序没有任何形式,我想在类文件中使用相同的代码。使用c#从线程捕获热键;

我很困惑,因为我无法在类文件中写入事件处理函数[keypressed]。 相反,我想在线程中使用按键。

请帮忙。

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 
     { 

     } 
    } 

回答

2

如果你想捕捉一个没有窗体的全局热键,恐怕你不能。

的原因是全局热键发送到一个窗口句柄(在WNDPROC,亦称消息泵处理)

所以基本上一路Windows上运行,以获得他们,你不能没有一个表单中使用全局热键。

我不完全确定这是你想要做的事情。但另一方面,如果没有任何形式,也不会有任何本地热键,所以我看不出还有什么可能。

你可能想进一步澄清你的问题有点(没有冒犯性)

+0

好吧然后,我会做一个使用表格。但是有没有办法让表单看不见,它甚至不会在任务栏中出现。 可能吗?谢谢。 – Anuya 2009-07-15 05:35:10