使用 AHK 交换 Ctrl 和 Capslock 以进行远程访问会话 Windows 7
Swap Ctrls and Capslock for remote access sessions using AHK for Windows 7
我在校园内使用计算机访问我办公室的 Windows 7 台式机,我在交换 CapsLock
和 Ctrl
密钥时遇到问题。
问题是,我在我办公室的机器上只有管理员权限,我通过编辑注册表(regedit
)交换了CapsLock
和Ctrl
,添加一个合适的"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
当我在本地机器上没有管理员权限时,我应该怎么做才能在远程访问的机器上始终指定 CapsLock
和 Ctrl
之间的密钥交换?在我自己的笔记本电脑上,我还通过注册表交换了 CapsLock
和 Ctrl
,在远程访问会话中交换这些密钥没有问题。
祝一切顺利,
-临风
这个 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解决方案
奋斗
在如何交换 CapsLock 和 Ctrl 上挣扎了几个小时后,我徒劳无功,发现可能没有理想的解决方案。 (理想的级别是使用管理员权限创建 scancode
映射。)
解决方案
我最终买了一个带 DIP 开关的机械键盘,这解决了我通过 AHK 脚本软 re-mapping 按键的所有困难。 "re-wired" 键盘的 DIP 开关让键 CapsLock 的行为就像 Ctrl.
我已经设法使用 uncap
和 AutoHotKey
来解决这个问题。
开盖的GitHub:https://github.com/susam/uncap
- 运行
AutoHotKey
本地机器上的脚本
- 在远程计算机上下载
uncap
- 运行 PowerShell
path\to\uncap.exe 0x14:0x14 0x14:0xa2
这将覆盖默认行为,因此它不会使您 Esc 无用
详见here
更实用的是,可以将以下三个文件放入U盘,随身携带。 (鉴于当前的 StayHome 命令,UCA 未经过测试。某些学校计算机可能会完全禁止来自 运行ning 的 *.exe
文件?)
uncap.exe
,从 here. Or, refer to the Github repo for uncap 最新的安装程序下载。
- Bat 文件 1 触发重新映射。称之为
Swap_Capslock_and_Ctrl.bat
。并且,输入以下内容:
.\uncap.exe 0x14:0xa2 0xa2:0x14
- bat文件2,停止脚本。命名为
StopScript.bat
,内容为:
.\uncap.exe -k
我在校园内使用计算机访问我办公室的 Windows 7 台式机,我在交换 CapsLock
和 Ctrl
密钥时遇到问题。
问题是,我在我办公室的机器上只有管理员权限,我通过编辑注册表(regedit
)交换了CapsLock
和Ctrl
,添加一个合适的"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
当我在本地机器上没有管理员权限时,我应该怎么做才能在远程访问的机器上始终指定 CapsLock
和 Ctrl
之间的密钥交换?在我自己的笔记本电脑上,我还通过注册表交换了 CapsLock
和 Ctrl
,在远程访问会话中交换这些密钥没有问题。
祝一切顺利,
-临风
这个 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解决方案
奋斗
在如何交换 CapsLock 和 Ctrl 上挣扎了几个小时后,我徒劳无功,发现可能没有理想的解决方案。 (理想的级别是使用管理员权限创建 scancode
映射。)
解决方案
我最终买了一个带 DIP 开关的机械键盘,这解决了我通过 AHK 脚本软 re-mapping 按键的所有困难。 "re-wired" 键盘的 DIP 开关让键 CapsLock 的行为就像 Ctrl.
我已经设法使用 uncap
和 AutoHotKey
来解决这个问题。
开盖的GitHub:https://github.com/susam/uncap
- 运行
AutoHotKey
本地机器上的脚本 - 在远程计算机上下载
uncap
- 运行 PowerShell
path\to\uncap.exe 0x14:0x14 0x14:0xa2
这将覆盖默认行为,因此它不会使您 Esc 无用
详见here
更实用的是,可以将以下三个文件放入U盘,随身携带。 (鉴于当前的 StayHome 命令,UCA 未经过测试。某些学校计算机可能会完全禁止来自 运行ning 的 *.exe
文件?)
uncap.exe
,从 here. Or, refer to the Github repo for uncap 最新的安装程序下载。- Bat 文件 1 触发重新映射。称之为
Swap_Capslock_and_Ctrl.bat
。并且,输入以下内容:
.\uncap.exe 0x14:0xa2 0xa2:0x14
- bat文件2,停止脚本。命名为
StopScript.bat
,内容为:
.\uncap.exe -k