2009-07-15 95 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