将 Numpad 与修改键一起使用会表现出奇怪的行为

Posted

技术标签:

【中文标题】将 Numpad 与修改键一起使用会表现出奇怪的行为【英文标题】:Using Numpad with Modifier Keys exhibits curious behavior 【发布时间】:2009-04-29 18:04:21 【问题描述】:

我有一个键盘事件侦听器,我正在侦听number pad key codes(1 到 9),以了解何时激活数字锁定;这很好用。但是,在我的应用程序中,我还希望允许使用修饰键 (CTRL) 和数字键盘键。奇怪的是,当按住 CTRL 时,按 1 或 3 不会产生任何键盘事件,而 2 和 4 - 9 会产生预期的事件。 我在谷歌搜索后看到了其他关于这个问题的参考资料,所以我认为这不一定是 Flash 特有的,但我还没有找到任何答案。

我尝试使用 SHIFT 作为修饰符,但这只会导致从数字键盘生成键码,就好像数字锁定已关闭(例如,SHIFT+Numpad1 返回结束键码,无论数字锁定状态如何) - 显然这个是有意的 Windows 行为。由于altcodes,ALT 不是小键盘的选项。

关于如何让 CTRL+Numpad1 和 CTRL+Numpad3 生成键盘事件的任何想法?或者对他们为什么不这样做的任何解释?

编辑:我尝试在 Firefox 中使用这些组合键,如下 enriquein 建议的那样,所有组合键都可以正常工作,这让我相信这可能是 Flash 特有的问题,或者至少不是硬件问题。

【问题讨论】:

这里从死里复活,以防万一其他人在这里偶然发现。对于在浏览器(特别是 Flash 和 Silverlight)中运行并在 Internet Explorer 中运行的插件,我遇到了与此类似的问题。本质上,IE 拥有的任何快捷方式都胜过网页和插件; IE 吞下键盘事件,不会将其发送给页面中运行的插件。您的具体问题可能是因为 IE 有 CTRL+1 到 3 的快捷方式(但没有 CTRL+4 到 9)。我在非 IE 浏览器中没有遇到同样的问题。 【参考方案1】:

过去,我在特定键盘上的数字键盘上遇到过问题。各种组合键无法在特定键盘上注册,在这种情况下,您使用的键盘可能不会生成任何事件。不能保证可以正常工作,但我建议尝试使用不同的键盘(不同的供应商等),看看是否可行。如果您使用的是非英文键盘,本地化键盘也可能存在问题。

【讨论】:

【参考方案2】:

我几乎可以肯定它与 Flash 无关,因为我在本地化键盘上遇到了类似的问题,并且根本无法让它为某些键或组合键生成事件。

尝试枚举所有关键事件并搜索它们映射到的内容,或者谷歌 evtest.c,编译并运行它,看看它要说什么。

【讨论】:

这是在 Windows 上,evtest.c 看起来是 Unix-only。 是的,Unix 特定的代码,你是对的,抱歉。也许如果你启动一个 live linux 发行版只是为了运行那几个测试。【参考方案3】:

确实,它看起来像是特定于键盘的。我在 Firefox 中阅读此问题时尝试了组合键,它们触发了与按 Ctrl+Number 相同的事件(即切换到选项卡#Number)。

这是使用标准的美国/101 键英文键盘(没有额外的媒体按钮或任何东西)。

【讨论】:

我不知道 Firefox 有这种行为 - 我只是试了一下,CTRL+Numpad1 和 Numpad3 工作正常。也许这是一个特定于 Flash 的问题......【参考方案4】:

某些键盘不注册某些组合键。我认为这取决于它们的组合方式。例如,有些人可能会注册左手 Ctrl + 组合键,但不会注册右 Ctrl + 同一个键!

一种解决方法是检测 Ctrl 键的按键按下和按键向上事件。

然后您可以为 Ctrl + 数字键盘键引发自定义事件,或使用 volatile 标志来显示 Ctrl 键状态。

【讨论】:

以上是关于将 Numpad 与修改键一起使用会表现出奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章

转载备库由于表无主键导致延迟

Windows窗体计算器 - 用于输入的Numpad键

Numpad 键事件导致 GetKeyboardState 中的键卡住

[TJOI2017]DNA

CSS布局相关——盒模型和浮动

[BZOJ4892][TJOI2017]DNA(后缀数组)