乐趣区

关于编辑器:Windows-重新映射-CapsLock-大写锁定到-Ctrl

Windows 从新映射 CapsLock 大写锁定到 Ctrl

本要点中的这些办法实用于我的美国键盘布局。我不确定其余布局。如果呈现问题,请复原您的更改;删除您创立的注册表项(并重新启动)。

强烈推荐 办法 5 ctrl2cap,因为不会影响 FastGestures 的触控板三指滑动

办法 1. 通过 regedit 手动批改

regedit 中导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout 并在名为 Scancode Map 中创立一个新的二进制值。

00 00 00 00 00 00 00 00 02 00 00 00 1d 00 3a 00 00 00 00 00

保留。重启。结束。

参考:

  • Registry: HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout (renenyffenegger.ch)
  • https://superuser.com/a/1264295
Windows Registry Editor Version 5.00

; 这一串十六进制数据分为五组,每组四个字节:
;   00,00,00,00,\    header 版本 (固定值 00000000)
;   00,00,00,00,\    header flags (固定值 00000000)
;   04,00,00,00,\    # 该文本形容了一组条目(在此状况下是 3 个),以及一个空终止符行。;                    每个条目都由一个 2 字节的配对组成:要发送的键码和要发送的键盘按键。;                    每个条目依照“最不重要字节,最重要字节”的顺序排列,例如 0x1234 变为 34,12
;   1d,00,3a,00,\    发送 LEFT CTRL (0x001d) code 当用户按下 CAPS LOCK key (0x003a) 
;   38,00,1d,00,\    发送 LEFT ALT (0x0038) code 当用户按下 LEFT CTRL key (0x001d) 
;   3a,00,38,00,\    发送 CAPS LOCK (0x003a) code 当用户按下 LEFT ALT key (0x0038) 
;   00,00,00,00      NULL 终止符

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,\
                   00,00,00,00,\
                   04,00,00,00,\
                   1d,00,3a,00,\
                   38,00,1d,00,\
                   3a,00,38,00,\
                   00,00,00,00

办法 2. 创立您本人的注册表项文件

创立一个新的 .reg 文件并将其命名为有意义的名称,例如 capstoctrl.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,1d,00,3a,00,00,00,00,00

保留。运行该文件。重启。结束。

办法 3. 通过 PowerShell(以管理员身份)

以管理员身份关上 PowerShell (Win + X)

$hexified = "00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00".Split(',') | % {"0x$_"};

$kbLayout = 'HKLM:\System\CurrentControlSet\Control\Keyboard Layout';

New-ItemProperty -Path $kbLayout -Name "Scancode Map" -PropertyType Binary -Value ([byte[]]$hexified);

保留。运行该文件。重启。结束。

办法 4. Microsoft PowerToys

尝试一下 PowerToys 不仅能够从新映射大写锁定键,还能够从新映射其余键。Microsoft PowerToys:自定义 Windows 10 的实用程序。

Microsoft PowerToys:键盘管理器使您可能从新定义键盘上的按键。

以上办法都有问题,如果你还应用其余依赖 ctrl 的软件可能就会出问题。

这些软件如果须要监听原始按键,是仍旧能够监听到 caps 按下。这个时候在 sysinternals 工具箱有一个叫 ctrl2cap 的工具

办法 5. Ctrl2Cap 驱动级批改

出处:Ctrl2cap – Sysinternals | Microsoft Learn

Ctrl2cap 是一个内核模式设施驱动程序,用于筛选零碎的键盘类驱动程序,以便将 caps-lock 字符转换为 control 字符。像我这样从 UNIX 迁徙到 NT 的人习惯于将 control 键置于规范电脑键盘上 caps-lock 键的地位,因而这样的实用工具对于咱们的编辑工作至关重要。

装置

  • 关上管理员 cmd,或者 管理员 powershell
  • 从解压缩 Ctrl2cap 文件的目录中运行命令 Ctrl2cap.exe /install 以装置 Ctrl2cap。若要卸载,ctrl2cap /uninstall

Ctrl2cap 的工作原理

在 NT 4 上,Ctrlcap 实际上相当简略。它只是将本身附加到键盘类驱动程序,以便捕捉键盘读取申请。对于每个申请,它都会公布一个 I/O 实现回调,此时它会查看返回的扫描代码。如果它恰好是 caps-lock,则 ctrl2cap 将其更改为 left-control。

在 Win2K 上,Ctrl2cap 是一个 WDM 筛选器驱动程序,它在键盘类设施之上的键盘类设施堆栈中分层。这与 Win2K DDK 的 kbfiltr 示例造成比照,后者将本人分层在 i8042 端口设施和键盘类设施之间。出于以下几个起因,我抉择在键盘类设施上分层:

  • 这意味着 Ctrl2cap IRP\_MJ\_READ 拦挡和操作代码在 NT 4 和 Win2K 版本之间共享。
  • 我不须要提供 INF 文件,也不须要让用户通过设施管理器来装置 Ctrl2cap – 我只需批改相应的注册表值(键盘类设施的 HKLM\System\CurrentControlSet\Control\Class UpperFilters 值)。

我的办法的毛病是(这是一个长处还是毛病,取决于你的观点):

  • 因为我没有通过设施管理器应用 INF 文件进行装置,因而不会正告用户 Ctrl2cap 驱动程序文件未由 Microsoft 进行数字签名。

在这种状况下,我感觉长处大于毛病。然而,在为 Ctrl2cap 上的 Win2K 键盘筛选器建模之前,我强烈建议你学习 Win2K DDK 中的 kbfiltr 示例。Kbfiltr 在键输出序列中的拦挡点使 kbfiltr 能够轻松地将击键注入输出流。

参考

  • Ctrl2cap – Sysinternals | Microsoft Learn
  • https://superuser.com/a/1389340
  • Remap Caps Lock to Control on Windows 10 (github.com)
退出移动版