【问题标题】:KeyDown event in C# for system keysC# 中用于系统键的 KeyDown 事件
【发布时间】:2015-09-11 13:33:27
【问题描述】:

我正在尝试捕获任何KeyDown 事件,无论哪个项目具有焦点。我的构造函数中有以下代码:

Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown;

我的功能在这里:

void CoreWindow_KeyDown(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.KeyEventArgs args)
{
    //Stuff in here
}

这适用于常规键(箭头、字母),但不接收特殊键的事件(如 EnterTab)。

如何拦截 EnterTab 按键的事件并阻止系统处理它?无论焦点是什么对象,我都需要一直获取事件。

【问题讨论】:

  • 您可能想要查看 Windows 挂钩。它们对您的目的比尝试捕获系统事件更有用。如果你愿意,我可以找到并发布一些挂钩文档的链接
  • 您应该查看有关 key down 的文档,key down 是用于“显示”的键。
  • 您也可以尝试处理按键向上和按键以覆盖“海滨”
  • 听起来很高级,你正在开发一个键盘记录器(如果这不是实际的预期目的,那就是另一回事了)你可能想搜索如何在 c# 中构建一个键盘记录器作为从哪里开始的基础。正如 rmn36 所说,它需要 windows 钩子来做你想做的事情。
  • 您无法从此事件中获取非系统密钥。可怕地未指定,但基本信息是您不能破坏基本的键盘使用。只有当您的 UI 具有少于 2 个可聚焦控件时,您才会获得 Tab。只有当焦点不在使用它的控件上时,您才会得到 Enter,例如 Button。我的水晶球说您正在寻找 CharacterReceived 事件。

标签: c# xaml keydown eventhandler


【解决方案1】:

处理密钥的过程相当复杂。 KeyDown 实际上在过程中很晚,并且不包括“控制”键。要获取这些键,您需要覆盖 IsInputKey(用于 Tab 和 Control 键)或 ProcessDialogKey(用于箭头键)。在这里查看一些优秀的文档https://msdn.microsoft.com/en-us/library/vstudio/ms171535%28v=vs.100%29.aspx

【讨论】:

  • 这不是 Winforms 问题。
猜你喜欢
  • 1970-01-01
  • 2011-05-16
  • 2011-06-12
  • 1970-01-01
  • 2010-12-11
  • 2021-11-26
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多