如何在不禁用该键或重新映射的情况下禁用 CAPS LOCK 功能?

如何在不禁用该键或重新映射的情况下禁用 CAPS LOCK 功能?

我一直在寻找一种禁用 Windows 中 CAPS LOCK 功能的方法。不幸的是,所有解决方案都是将其重新映射到 Nothing 或其他键。我是一名游戏玩家,想使用 CAPS LOCK 键来实现游戏内功能,但我不想在使用 caps lock 后 Windows 将所有内容大写(例如,在使用 WASD 飞行的太空 FPS 中使用 CAPS lock 更改目标)。

例子:

在我的游戏中,CAPS LOCK 被映射到“更改目标”

我按下 CAPS Lock,Windows 从现在起将把我输入的所有文本大写

我射击到了目标,但需要帮助,所以我现在进入聊天室,我想打字,但所有字母都是大写的

因此,为了避免大写文本,我再次按下 CAPS LOCK,但我的目标发生了变化,但现在我可以输入正常文本。

那么,有没有什么技巧可以禁用 Windows 中的大写功能,而不需要将 CAPS LOCK 键重新映射到其他键?

简而言之:我希望它能够被游戏等检测到,而无需启用大写文本。

答案1

有一种方法可以实现您想要的结果,但并不理想。您可以重新映射实际的键,以便大写锁定状态不会影响它们。换句话说,忽略capslock修饰符。这有效(事实上,我是用capslock ON修改过的键盘编写的 - 但有一个故障 - 如果有效地禁用了使用 生成大写字母shift。虽然可以为此进行单独的映射,但我尝试过的任何程序都无法识别它(布局映射器测试器本身除外)。所以每当我需要输入大写字母时,我都必须切换到正常键盘布局(通过ctl+alt+digit快捷方式) - 不是特别方便,但它不会改变caps状态!

我用过Microsoft 键盘布局创建器 1.4构建布局。

有关键盘偶数实际上是如何处理的一些背景信息(添加到您与 soandos 的讨论中):(簡體)
按下某个键时,会产生一个扫描码。此扫描码由 Windows(键盘驱动程序)处理并转换为virtual keyvirtual key然后将此(值)发送到应用程序。capslock VC_CAPITAL正在发送(并由您的游戏解释)。虚拟代码还不是字符键。在收到 VK_CODE(并可能以某种方式对其做出反应)后,应用程序将向操作系统询问实际的字符代码。现在,返回给应用程序的代码取决于操作系统跟踪的几个因素 - 大写锁定状态就是其中之一。这就是大写锁定可在各个应用程序之间工作的原因 - 因为它是由操作系统而不是(仅)应用程序跟踪的。更多详情

答案2

我最近遇到了这个问题,所以我用以下方法制作了自己的键盘布局Kbd编辑其中字母键忽略大写锁定(不改变 shift 的行为)。布局是公开可用的这里;只需运行安装程序并切换到语言栏中的新布局。

答案3

您所要求的是不可能的。如果游戏检测到某个键,它可以让它做任何它想做的事情(在这种情况下输入大写文本)。如果不更改游戏代码,就无法改变这一点。

扩展:

在大多数情况下,按下大写锁定键是硬件问题(指示灯可能会亮起等)。然后,该行为将由您当时使用的任何应用程序映射。如果您的游戏决定忽略该行为,它可以。如果它想将您之后输入的每个字母都变成“A”,它可以。在这种情况下,它决定遵循惯例,如果大写锁定键处于打开状态,则将字母大写。

离开游戏后,大写锁定键仍会处于打开状态,因为它是硬件问题。Windows 看到这一点,并决定遵循惯例,将字母大写。

答案4

有几种方法可以做到这一点,而无需安装第三方软件。使用 Microsoft PowerToys 实用程序或使用 Windows 注册表。

我不用大写锁定键,但我仍然想让这个键在游戏中有用。所以我使用 PowerToys 实用程序将其重新映射到右移位。这适用于大多数游戏,但在 GTA5 中,大写锁定键再次切换。这变得令人沮丧,因为我经常不得不启动 GTA 才能关闭大写锁定。但是,使用 Windows 注册表,我能够重新映射它,并且 GTA 停止切换大写锁定状态。

这是我用来将 capslock 映射到右移的注册表编辑:将以下内容粘贴到 txt 文件中,将其重命名为 *.reg 并运行它:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,36,00,3a,00,00,00,00,00

相关内容