如何检测C#表单中是否按下了多个键

时间:2016-06-17 12:00:12

标签: c# forms winforms keyboard key

我已经找到了一个解决方案来检测是否在 C#中按下了多个键(我找不到解决方案!)。 我有两个玩家的游戏,我需要检测是否按下一个键来移动它们。 (我正在使用C#表单) 我只找到了答案来检测两个键是否同时被按下而且没有帮助。

- 编辑 -

如何使用KeyPressed(C#)检测是否按下了某个键

3 个答案:

答案 0 :(得分:2)

问题的根源在于Winforms下根本不支持这个简单的请求。

听起来很奇怪?它是。 Winforms经常痛苦地靠近硬件层,虽然这有时候很有趣,但它也可能只是一个皮塔饼......

((Hans应该注意一个隐藏的提示:在KeyUp中你会被告知哪个键被释放,所以你可以跟踪你想要的任意数量的键......)

但是现在有一个直接的解决方案,它要求你保留一堆bools并在KeyDown {{1}中管理它们} events ..:输入Keyboard.IsKeyDown

有了这样的代码:

  

使用KeyUp确定密钥是否已关闭。     Keyboard.IsKeyDowne的一个实例。

KeyEventArgs

当然你也可以使用多个密钥:

if (Keyboard.IsKeyDown(Key.Return)) {
    btnIsDown.Background = Brushes.Red; }
...

唯一的要求是你从if (Keyboard.IsKeyDown(Key.A) && Keyboard.IsKeyDown(Key.W)) ... 借用它:

首先:添加命名空间:

WPF

然后:添加两个对项目的引用:

using System.Windows.Input;

enter image description here

现在您可以随时测试键盘,包括PresentationCore WindowsBase 事件..

答案 1 :(得分:0)

也许打印到控制台......

if (Input.GetKeyDown(KeyCode.G))     {print ("G key pressed");}

答案 2 :(得分:-1)

您可以使用程序级键盘钩子来实现它。您可以在user32.dll中使用Win-API函数,如 SetWindowsHookEx

以下是一些例子:

A Simple C# Global Keyboard Hook
Global keyboard capture in C# application