2011-02-20 52 views
1
private void button1_Click(object sender, EventArgs e) 
{ 
    Keys key = new Keys(); 
    while (true) 
    { 
     if (key == Keys.F5) 
     { 
      MessageBox.Show("F5"); 
     } 
     else if (key == Keys.F4) 
     { 
      MessageBox.Show("F4"); 
     } 
    } 
} 

如何在窗體焦點不清的情況下在後臺運行?我的最終目標是使其在後臺運行,並等待F5/F4鍵被按下。c#按鍵在後臺聆聽

+0

你想獲得的所有按鍵像鍵盤記錄器,還是你想要一些全球熱鍵? – CodesInChaos

+0

我給它添加了更多信息。我只是想讓它在後臺運行,所以如果我按F5/F4它會執行一個方法。我正在製作一個骰子游戲工具,F5會發送一些文本,特別是「你贏了!」而F4會說「對不起,你輸了。」 該窗口將失焦,button_click只是程序的「開始收聽」按鈕。 – Kyle

+0

在這種情況下'RegisterHotKey'是要走的路。 – CodesInChaos

回答

4

我不完全確定你的問題是什麼。如果你想註冊一個全局熱鍵,你可以使用windows api函數RegisterHotKey
在回答如何在C#中使用此函數時,已經有幾個問題了。

如果您想要一個僅在特定控件或窗體上處於活動狀態的熱鍵,則可以使用由WinForms提供的事件。

如果您想在桌面上顯示所有按鍵的通知,那麼低級別的鍵盤鉤子是合適的。但是如果你只是想要一個全局熱鍵,不要使用鉤子。

你的代碼本身沒有多大意義。 new Keys()只是返回默認值Keys枚舉(Keys.None我猜)它永遠不會等於F4F5

+0

我重新寫了。我沒在想。 – Kyle

1

不知道的關係是Button1的和按鍵之間的什麼,但看看下面的KeyPressEventHandler

代碼示例,顯示最後按下的鍵:

private void button1_Click(object sender, EventArgs e) 
    { 
     this.textBox1.KeyPress += new KeyPressEventHandler(keypressed); 
    } 

    private void keypressed(Object o, KeyPressEventArgs e) 
    { 
     label1.Text = e.KeyChar.ToString(); 
    } 
+0

button1是我窗口窗體上的「開始聆聽」按鈕。 – Kyle

+0

代碼更新了樣本 – Teknokraten

+1

我認爲這隻有在窗體有焦點時纔有效。更新後的問題希望熱鍵是全球性的。 – CodesInChaos