2015-05-17 73 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

是否要禁用系统宽输入?我怀疑你可以使用托管应用程序来做到这一点。 –