如何检测当前是否有任何键盘按键被按下?我对关键是什么都不感兴趣,我只想知道是否有任何按键仍然按下。如何检测是否有任何按键被按下
if (Keyboard.IsKeyDown(Key.ANYKEY??)
{
}
如何检测当前是否有任何键盘按键被按下?我对关键是什么都不感兴趣,我只想知道是否有任何按键仍然按下。如何检测是否有任何按键被按下
if (Keyboard.IsKeyDown(Key.ANYKEY??)
{
}
public static IEnumerable<Key> KeysDown()
{
foreach (Key key in Enum.GetValues(typeof(Key)))
{
if (Keyboard.IsKeyDown(key))
yield return key;
}
}
然后你可以这样做:
if(KeysDown().Any()) //...
遍历System.Windows.Input.Key枚举值。
public static bool IsAnyKeyDown()
{
var values = Enum.GetValues(typeof(Key));
foreach (var v in values)
{
if (((Key)v) != Key.None)
{
if (Keyboard.IsKeyDown((Key)v))
{
return true;
}
}
}
return false;
}
好这里的答案...得到集中的所有keystates的一次使用GetKeyboardState()
:
以上是检查键盘的实时状态。
如果您依赖挂钩事件直到KeyDown/KeyUp事件来跟踪键盘的状态......那么这可能不太准确。
这是因为你依靠消息泵来处理和分发那些KeyDown/KeyUp消息......它们可能在真正的键盘状态再次发生变化后被传递。
此外,因为当你对键盘状态感兴趣的代码位正在运行时(通常在UI线程上)... KeyDown或KeyUp无法打断你......因为它们是在UI线程上分派的太...这就是为什么使用GetKeyBoardState()
或Keyboard.IsKeyDown
应该使用。
(上面是假设你要和关心生活状态)
如果你想检测关键只在我们的应用程序按下(当你的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.");
}
如果你想要德当一个按键被按下时,即使你的WPF窗口没有被激活,也会稍微困难一点,但是可以。我从Windows API推荐RegisterHotKey
(定义系统范围的热键)和UnregisterHotKey
。尝试在C#使用这些从pinvoke.net或这些教程:
Thse是在Microsoft Forums样品。你可以使用Virtual-Key Codes。 我希望我很清楚,你会理解我的答案。
确实很好的答案 –