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

时间:2015-11-18 18:02:30

标签: windows windows-7 keyboard-shortcuts autohotkey remote-desktop

我在校园内使用计算机来访问我办公室中的Windows 7桌面计算机,而我在更换CapsLockCtrl密钥时遇到问题。

问题是,我的办公室机器上只有管理员权限,我通过添加适当的内容来交换CapsLockCtrl来编辑注册表(regedit) "扫描码地图"。

但是,这对任何远程访问会话都没有帮助,因为本地计算机上的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,在远程访问会话中交换这些密钥没有问题。

一切顺利,

-Linfeng

3 个答案:

答案 0 :(得分:2)

我设法与uncap一起使用AutoHotKey来解决此问题。

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

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

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

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

有关详细信息,请参见here


实际上,可以将以下三个文件放入拇指驱动器中并随身携带。 (鉴于当前的StayHome订单,UCA尚未经过测试。某些学校计算机可能会禁止*.exe文件完全运行吗?)

  1. uncap.exe,是从here下载的。或者,请参考Github repo for uncap最新的安装程序。
  2. 蝙蝠文件1触发重新映射。称为Swap_Capslock_and_Ctrl.bat。然后,输入以下内容:
.\uncap.exe 0x14:0xa2 0xa2:0x14
  1. 蝙蝠文件2,以停止脚本。命名为StopScript.bat,内容:
.\uncap.exe -k

答案 1 :(得分:1)

低技术解决方案

斗争

如何交换 CapsLock Ctrl 挣扎数小时后,我发现可能没有一个理想的解决方案。 (非常适合使用管理员权限创建scancode映射。)

解决方案

我最后买了一个带DIP开关的机械键盘,这解决了我所有的困难,通过AHK脚本轻轻地重新映射键。 DIP开关排序"重新连接"键盘 CapsLock 表现为 Ctrl

答案 2 :(得分:0)

此AutoHotkey脚本使用变通方法提供了非常好的键盘功能,使 CapsLock 的行为类似于 Ctrl ,没有按钮闪烁。基本上 Ctrl + C / Ctrl + V 等成为一个两阶段的过程,按住大写字母,然后按下字母,但它可以变得相当流畅。

;===============
;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脚本将显示大写开启/关闭状态:

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