autohotkey 大写锁定到 ctrl 不释放
autohotkey caps lock to ctrl not releasing
我正在使用 AutoHotkey 将 Caps Lock
映射到 Ctrl
,并尝试在 Total Commander 中将 Ctrl + K
用作 Tab
。
SetCapsLockState AlwaysOff
Capslock::Ctrl
#ifWinActive ahk_class TTOTAL_CMD
^k::Send, {Tab}
#ifWinActive
当我将 Ctrl + K
重映射与正常 Ctrl
一起使用时,效果很好。但是当我尝试将它与 Caps Lock + K
一起使用时,它是第一次工作,但是当我没有释放 Caps Lock
时,它发送 k
而不是 Tab
.日志说:
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)
这是日志,当我按下 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
,但我没有找到任何解决方案。有人遇到过这个问题吗?
编辑:
另一件有趣的事情是,当我发送代码而不是简单的键时,它可以在不释放大写锁定的情况下工作:
^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 (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 重新映射时遇到过类似的奇怪问题。您可以将 CapsLock 设置为只检查 #If
指令中键的状态,而不是将 CapsLock 映射到控件然后在您的热键中使用该组合。我认为这将解决大部分奇怪的问题。
SetCapsLockState, AlwaysOff
CapsLock::Return
#If WinActive("ahk_class TTOTAL_CMD") and GetKeyState("CapsLock", "P")
k::Send, {Tab}
我个人只会检查您的 window 是否在 ^k 按键上处于活动状态,然后从那里开始。我使用了 Untitled - Notepad 这样我就可以测试了。
CapsLock::Ctrl
^k::
{
IfWinActive, Untitled - Notepad
SendInput, {tab}
else
Msgbox
return
}
我正在使用 AutoHotkey 将 Caps Lock
映射到 Ctrl
,并尝试在 Total Commander 中将 Ctrl + K
用作 Tab
。
SetCapsLockState AlwaysOff
Capslock::Ctrl
#ifWinActive ahk_class TTOTAL_CMD
^k::Send, {Tab}
#ifWinActive
当我将 Ctrl + K
重映射与正常 Ctrl
一起使用时,效果很好。但是当我尝试将它与 Caps Lock + K
一起使用时,它是第一次工作,但是当我没有释放 Caps Lock
时,它发送 k
而不是 Tab
.日志说:
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)
这是日志,当我按下 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
,但我没有找到任何解决方案。有人遇到过这个问题吗?
编辑:
另一件有趣的事情是,当我发送代码而不是简单的键时,它可以在不释放大写锁定的情况下工作:
^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 (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 重新映射时遇到过类似的奇怪问题。您可以将 CapsLock 设置为只检查 #If
指令中键的状态,而不是将 CapsLock 映射到控件然后在您的热键中使用该组合。我认为这将解决大部分奇怪的问题。
SetCapsLockState, AlwaysOff
CapsLock::Return
#If WinActive("ahk_class TTOTAL_CMD") and GetKeyState("CapsLock", "P")
k::Send, {Tab}
我个人只会检查您的 window 是否在 ^k 按键上处于活动状态,然后从那里开始。我使用了 Untitled - Notepad 这样我就可以测试了。
CapsLock::Ctrl
^k::
{
IfWinActive, Untitled - Notepad
SendInput, {tab}
else
Msgbox
return
}