Заглавные буквы autohotkey к ctrl не выпускаются

Я использую AutoHotkey для сопоставления Caps Lock в Ctrlи пытается использовать Ctrl + K как Tab в Total Commander.

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)

2 ответа

Решение

Я помню, как сталкивался с такими странными проблемами, когда я также делал перерисовки CapsLock. Вместо того, чтобы сопоставлять CapsLock для управления и затем использовать эту комбинацию в вашей горячей клавише, вы можете настроить CapsLock на выполнение только проверки состояния ключа в #If директивы. Я думаю, что это решит большинство этих странных вопросов.

SetCapsLockState, AlwaysOff
CapsLock::Return

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

Лично я бы просто проверил, активно ли ваше окно при нажатии клавиши ^k, и пошел бы оттуда. Я использовал Untitled - Блокнот, чтобы я мог проверить.

CapsLock::Ctrl
^k::
{
    IfWinActive, Untitled - Notepad
        SendInput, {tab}
    else
        Msgbox
    return
}
Другие вопросы по тегам