Autohotkey 自动热键上限锁定为ctrl而不释放

Autohotkey 自动热键上限锁定为ctrl而不释放,autohotkey,remap,ctrl,capslock,Autohotkey,Remap,Ctrl,Capslock,我正在使用自动热键将Caps Lock映射到Ctrl,并尝试在Total Commander中将Ctrl+K用作选项卡 SetCapsLockState AlwaysOff Capslock::Ctrl #ifWinActive ahk_class TTOTAL_CMD ^k::Send, {Tab} #ifWinActive 当我使用Ctrl+K与正常的Ctrl重新映射时,效果很好。但是,当我尝试将它与Caps Lock+K一起使用时,它第一次起作用,但是当我没有释放Caps Lock

我正在使用自动热键将
Caps Lock
映射到
Ctrl
,并尝试在Total Commander中将
Ctrl+K
用作
选项卡

SetCapsLockState AlwaysOff
Capslock::Ctrl

#ifWinActive ahk_class TTOTAL_CMD
  ^k::Send, {Tab}
#ifWinActive
当我使用
Ctrl+K
与正常的
Ctrl
重新映射时,效果很好。但是,当我尝试将它与
Caps Lock+K
一起使用时,它第一次起作用,但是当我没有释放
Caps Lock
时,它会发送
K
而不是
选项卡
。日志上写着:

008: SetCapslockState,AlwaysOff
009: Return (3.49)
; Hiting Ctrl + K twice.
081: Send,{Tab} (0.02)
081: Return (0.30)
081: Send,{Tab} (0.02)
081: Return (1.59)
; Hiting Caps Lock + K twice.
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl DownTemp}
009: Return (0.47)
081: Send,{Tab} (0.01)
081: Return (0.73)
; The second Tab is missing, a simple K sent.
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl Up}
009: Return (3.06)
008: SetCapslockState,AlwaysOff
009: Return (8.88)
; Ctrl + E twice.
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD
058: Return (0.36)
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD
058: Return (1.76)
009: SetKeyDelay,-1
; Caps Lock + E twice.
009: Send,{Blind}{Ctrl DownTemp}
009: Return (0.34)
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD
058: Return (0.39)
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD
058: Return (0.28)
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl Up}
009: Return (1.47)

; Caps Lock + E twice with releasing.
008: SetCapslockState,AlwaysOff
009: Return (2.54)
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl DownTemp}
009: Return (0.34)
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD
058: Return (0.09)
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl Up}
009: Return (0.25)
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl DownTemp}
009: Return (0.23)
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD
058: Return (0.08)
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl Up}
009: Return (1.98)
这是日志,当我按下
Caps Lock+K
,释放它,然后再次按下时:

009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl DownTemp}
009: Return (0.34)
081: Send,{Tab} (0.01)
081: Return (0.08)
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl Up}
009: Return (0.34)
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl DownTemp}
009: Return (0.19)
081: Send,{Tab} (0.01)
081: Return (0.06)
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl Up}
009: Return (3.00)
我认为问题的根源可能在
CapsLock::Ctrl
,但我没有找到任何解决方案。有人遇到这个问题吗

编辑:

另一件有趣的事情是,当我发送代码而不是简单的键时,它可以在不释放caps锁的情况下工作:

^e::PostMessage, 1075, 3005, , , ahk_class TTOTAL_CMD ; cm_SwitchToNextTab=3005;Switch to next Tab (as Ctrl+Tab) (see TOTALCMD.INC file)
日志上写着:

008: SetCapslockState,AlwaysOff
009: Return (3.49)
; Hiting Ctrl + K twice.
081: Send,{Tab} (0.02)
081: Return (0.30)
081: Send,{Tab} (0.02)
081: Return (1.59)
; Hiting Caps Lock + K twice.
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl DownTemp}
009: Return (0.47)
081: Send,{Tab} (0.01)
081: Return (0.73)
; The second Tab is missing, a simple K sent.
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl Up}
009: Return (3.06)
008: SetCapslockState,AlwaysOff
009: Return (8.88)
; Ctrl + E twice.
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD
058: Return (0.36)
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD
058: Return (1.76)
009: SetKeyDelay,-1
; Caps Lock + E twice.
009: Send,{Blind}{Ctrl DownTemp}
009: Return (0.34)
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD
058: Return (0.39)
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD
058: Return (0.28)
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl Up}
009: Return (1.47)

; Caps Lock + E twice with releasing.
008: SetCapslockState,AlwaysOff
009: Return (2.54)
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl DownTemp}
009: Return (0.34)
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD
058: Return (0.09)
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl Up}
009: Return (0.25)
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl DownTemp}
009: Return (0.23)
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD
058: Return (0.08)
009: SetKeyDelay,-1
009: Send,{Blind}{Ctrl Up}
009: Return (1.98)

我记得在拍摄CapsLock重拍时也遇到过类似这样的奇怪问题。您可以在
#If
指令中将CapsLock设置为只检查键的状态,而不是将CapsLock映射到control,然后在热键中使用该组合。我认为这将解决大多数这些奇怪的问题

SetCapsLockState, AlwaysOff
CapsLock::Return

#If WinActive("ahk_class TTOTAL_CMD") and GetKeyState("CapsLock", "P")
    k::Send, {Tab}

我个人只想在^k键上检查您的窗口是否处于活动状态,然后从那里开始。我用了无标题的记事本,这样我就可以测试了

CapsLock::Ctrl
^k::
{
    IfWinActive, Untitled - Notepad
        SendInput, {tab}
    else
        Msgbox
    return
}

它与我的脚本的不同之处在于行的顺序和窗口的检测。“无标题记事本”的问题在于,当您使用其他名称保存文件时,它会更改。当然,它会更改。我只是以它为例。OP显然必须改变它以适应他的需要我也没有使用指令——你是。它工作得很好——我只是做了一些修改,让CapsLock::Ctrl在Tcmd之外工作。