【问题标题】:how to suppress keyboard input如何抑制键盘输入
【发布时间】:2015-07-29 05:59:29
【问题描述】:

所以我正在尝试制作一个程序来禁用所有键盘输入,但仍然可以检测到何时按下某个键(不管是哪个键)。

我尝试使用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;
    }

但没有成功。密钥仍在处理中。

【问题讨论】:

  • 计时器不起作用。你应该挂上键盘。
  • 我看过了。你如何创建这样的钩子。

标签: c# input


【解决方案1】:

我假设您使用 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;
  }
}

【讨论】:

  • 在主控件中键入时键被禁用。但我一般想禁用它的键盘输入。
  • 您要禁用系统范围的输入吗?我怀疑您可以使用托管应用程序做到这一点。
猜你喜欢
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 2019-11-12
相关资源
最近更新 更多