如何检测是否按下任何键

Rob*_*urd 6 c# wpf c#-4.0

如何检测当前是否正在按任何键盘键?我对关键是什么不感兴趣,我只是想知道是否仍然按下了任何键.

if (Keyboard.IsKeyDown(Key.ANYKEY??)
{

}
Run Code Online (Sandbox Code Playgroud)

Ser*_*rvy 10

public static IEnumerable<Key> KeysDown()
{
    foreach (Key key in Enum.GetValues(typeof(Key)))
    {
        if (Keyboard.IsKeyDown(key))
            yield return key;
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

if(KeysDown().Any()) //...
Run Code Online (Sandbox Code Playgroud)

  • `if (key != Key.None &amp;&amp; Keyboard.IsKeyDown(key))` 因为 `Key.None` 无效并引发异常 (3认同)

Ion*_*zău 5

如果您只想检测在我们的应用程序中按下的键(当您的 WPF 窗口被激活时),请添加KeyDown如下所示:

public MainWindow()
{
    InitializeComponent();
    this.KeyDown += new KeyEventHandler(MainWindow_KeyDown);
}

void MainWindow_KeyDown(object sender, KeyEventArgs e)
{
    MessageBox.Show("You pressed a keyboard key.");
}
Run Code Online (Sandbox Code Playgroud)

如果您想检测何时按下某个键,即使您的 WPF 窗口未处于活动状态,这也有点困难,但可能是可行的。我推荐RegisterHotKey(定义系统范围的热键)和UnregisterHotKeyWindows API。尝试在来自pinvoke.net或这些教程的C# 中使用这些:

这是Microsoft 论坛中的示例。

您将使用虚拟键代码。我希望我说的很清楚,你会明白我的回答。