2015-05-17 70 views
0

所以我想製作一個程序,禁用所有的鍵盤輸入,但仍然可以檢測到一個鍵被按下(無所謂)。如何抑制鍵盤輸入

我嘗試使用BlockInput方法,但它阻止了所有輸入(鼠標和鍵盤),並且不允許進一步檢測鍵盤按下。

這是我當前的代碼(函數是用1個週期的時間間隔定時器)

private void detect_key_press_Tick(object sender, EventArgs e) 
    { 
     Process p = Process.GetCurrentProcess(); 
     if (p != null) 
     { 
      IntPtr h = p.MainWindowHandle; 
      //SetForegroundWindow(h); 
      if (Keyboard.IsKeyDown(Key.A)) 
      { 
       //SendKeys.SendWait("k"); 
       this.BackColor = Color.Red; 

      } 
      else 
      { 
       this.BackColor = Control.DefaultBackColor; 
      } 
     } 
    } 

我怎麼能這樣做嗎?謝謝。

編輯

我試圖

private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) 
    { 
     e.Handled = true; 
     e.SuppressKeyPress = true; 
    } 

,但沒有成功。鑰匙仍然被處理。

+0

計時器不起作用。你應該鉤住鍵盤。 – Alex

+0

我看了。你如何創建這樣一個鉤子。 – ZeroByter

回答

0

我假設你使用Windows窗體?

如果將窗體上的KeyPreview設置爲true並在窗體的KeyDown上創建事件,則可以用這種方式處理鍵盤輸入。

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyData == Keys.S) // some accepted key 
    //Do something with it 
    else 
    { 
    //or cancel the key entry 
    e.Handled = true; 
    e.SuppressKeyPress = true; 
    } 
} 
+0

在主控制鍵入時鍵被禁用。但我想一般禁用它的鍵盤輸入。 – ZeroByter

+0

是否要禁用系統寬輸入?我懷疑你可以使用託管應用程序來做到這一點。 –