重新映射左 CTRL、左 ALT 和左 Win 键,无需 SharpKeys 并重写注册表?Windows 10

重新映射左 CTRL、左 ALT 和左 Win 键,无需 SharpKeys 并重写注册表?Windows 10

我习惯使用 Mac 工作,并且一直使用 SharpKeys 重新映射我的 Windows 机器,但不幸的是我的新雇主不允许我使用它。

我的目标是将 改为L CTRLL WINL WIN改为,L ALT并将L ALT改为L CTRL。有没有不用 SharpKeys 的方法?

我也阅读过有关注册表更改的信息,但我对此感到非常困惑,并且不确定如何为我的解决方案编写它,而且我也在等待 IT 团队的批准。

另外,有没有第三种方法来更改按键绑定?

答案1

据我所知,你不能。但 SharpKeys 是一款非常有用的实用程序,它一劳永逸地避免了你手动更改注册表项。

而且,它在模拟 MacOS 中 Ctrl/Command 键的位置时非常有用。

您只需运行一次,进行注册表编辑,然后重新启动...然后您可以安全地从 Windows 中删除该软件(并将其存储在“工具箱”阁楼中)。

唯一剩下的问题是,在 MacOS 中,当你启动终端时按 ⌘-C 而不是 Ctrl-C :)

答案2

如果您获得 IT 批准,您可以使用此 .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,04,00,00,00,38,00,1d,00,5b,e0,1d,\
  00,38,00,5b,e0,00,00,00,00


这是用这个创建的PowerShell 代码为指定的扫描码对创建 reg 值。

必须从管理 PowerShell 运行

##############################################################
$SimplePairs = @(
 0x38, 0x1d # lAlt > lCtrl
)

$ExtendedPairs = @(
 0x5b, 0xe0, 0x1d, 0x00 # LWinKey(0xe05b) > L Ctrl(0x1d)
 0x38, 0x00, 0x5b, 0xe0 # L Alt(0x38)     > LWinKey(0xe05b)
)
$ByteCount = 2 * $SimplePairs.Length + $ExtendedPairs.Length + 16
$Remap = New-Object -TypeName byte[] -ArgumentList $ByteCount
$Remap.Length
$Remap[8] = $SimplePairs.Length/2 + $ExtendedPairs.Length/4 + 1
For ($i = 0 ; $i -lt $SimplePairs.Length ; $i += 2) {
   $Remap[$i * 2 + 12] = $SimplePairs[$i]
   $Remap[$i * 2 + 14] = $SimplePairs[$i + 1]
}
For ($i = 0 ; $i -lt $ExtendedPairs.Length ; $i += 4) {
   $Offset = $SimplePairs.Length * 2
   $Remap[$i + 12 + $Offset] = $ExtendedPairs[$i]
   $Remap[$i + 13 + $Offset] = $ExtendedPairs[$i + 1]
   $Remap[$i + 14 + $Offset] = $ExtendedPairs[$i + 2]
   $Remap[$i + 15 + $Offset] = $ExtendedPairs[$i + 3]
}
$Splat = @{
Path  = 'HKLM:\SYSTEM\CurrentControlSet\Control\Keyboard Layout'
Name  = 'ScanCode Map'
Value = $Remap
Force = $True
}
$Splat['Value'] | format-hex
New-ItemProperty @Splat

相关内容