使用 AHK 交换 Ctrl 和 Capslock 以进行远程访问会话 Windows 7

Swap Ctrls and Capslock for remote access sessions using AHK for Windows 7

我在校园内使用计算机访问我办公室的 Windows 7 台式机,我在交换 CapsLockCtrl 密钥时遇到问题。

问题是,我在我办公室的机器上只有管理员权限,我通过编辑注册表(regedit)交换了CapsLockCtrl,添加一个合适的"Scancode Map"。

但是,这对任何远程访问会话都没有帮助,因为 CapsLock 在本地计算机上保持原样。

我求助于 AHK,但是在两台机器上的脚本 运行 中设置 CapsLock::LControl 并没有解决问题。通过 AHK 指定密钥交换后,按 CapsLock 确实会向 RDP 会话发送 Ctrl 击键。但是,在本地机器上,"CapsLock" 的灯也应打开(或关闭)!这表明,当 AHK 将 CapsLock 的按下转换为 Ctrl 时,本地机器将其视为 CapsLock 的原始按下。此外,多次按 Ctrl 会混淆 AHK 并最终终止进程。

我也尝试在本地机器上的脚本 运行 中设置以下内容,但没有帮助。

SetTitleMatchMode 2
#IfWinActive, Remote Desktop
    SetCapsLockState, off
#IfWinActive
; or
#IfWinActive, ahk_class TscShellContainerClass
    SetCapsLockState, off
#IfWinActive

当我在本地机器上没有管理员权限时,我应该怎么做才能在远程访问的机器上始终指定 CapsLockCtrl 之间的密钥交换?在我自己的笔记本电脑上,我还通过注册表交换了 CapsLockCtrl,在远程访问会话中交换这些密钥没有问题。

祝一切顺利,

-临风

这个 AutoHotkey 脚本使用变通方法来提供非常好的键盘功能,使 CapsLock 的行为类似于 Ctrl,没有按钮闪烁。基本上Ctrl+C/Ctrl+V等就成了两步过程,先按住capslock,再按字母,但是可以变得相当顺利。

;===============
;workaround script, pretty good functionality, no capslock blinking
CapsLock::
vIsCtrlOn := 1
Return

$a::
$b::
$c::
$d::
$e::
$f::
$g::
$h::
$i::
$j::
$k::
$l::
$m::
$n::
$o::
$p::
$q::
$r::
$s::
$t::
$u::
$v::
$w::
$x::
$y::
$z::
vLetter := SubStr(A_ThisHotkey, 1-1)
if vIsCtrlOn
SendInput ^%vLetter%
else
SendInput %vLetter%
vIsCtrlOn := 0
Return
;===============

我提供了一些可能对 OP 和其他 AutoHotkey 用户有帮助的测试说明:

;===============
;script with just these 3 lines, no capslock blinking
CapsLock::
SendInput {Enter}
Return
;===============

;===============
;script with just these 7 lines, capslock blinking
CapsLock::
SendInput {Enter}
Return

CapsLock & c::
SendInput ^c
Return
;===============

[编辑:]
这个额外的 AutoHotkey 脚本将显示大写锁定 on/off 状态:

vFormat := "zh0 b1 c0 fs18 x1000 y100 w150"
Loop
{
if GetKeyState("CapsLock", "T")
vText := "capslock on"
else
vText := "capslock off"
if !(vText = vText2)
Progress, %vFormat%, %vText%
vText2 := vText
Sleep 100
}
Return

Low-tech解决方案

奋斗

如何交换 CapsLockCtrl 上挣扎了几个小时后,我徒劳无功,发现可能没有理想的解决方案。 (理想的级别是使用管理员权限创建 scancode 映射。)

解决方案

我最终买了一个带 DIP 开关的机械键盘,这解决了我通过 AHK 脚本软 re-mapping 按键的所有困难。 "re-wired" 键盘的 DIP 开关让键 CapsLock 的行为就像 Ctrl.

我已经设法使用 uncapAutoHotKey 来解决这个问题。

开盖的GitHub:https://github.com/susam/uncap

  1. 运行 AutoHotKey 本地机器上的脚本
  2. 在远程计算机上下载 uncap
  3. 运行 PowerShell

path\to\uncap.exe 0x14:0x14 0x14:0xa2

这将覆盖默认行为,因此它不会使您 Esc 无用

详见here


更实用的是,可以将以下三个文件放入U盘,随身携带。 (鉴于当前的 StayHome 命令,UCA 未经过测试。某些学校计算机可能会完全禁止来自 运行ning 的 *.exe 文件?)

  1. uncap.exe,从 here. Or, refer to the Github repo for uncap 最新的安装程序下载。
  2. Bat 文件 1 触发重新映射。称之为 Swap_Capslock_and_Ctrl.bat。并且,输入以下内容:
.\uncap.exe 0x14:0xa2 0xa2:0x14
  1. bat文件2,停止脚本。命名为 StopScript.bat,内容为:
.\uncap.exe -k