Я переназначаю раскладку Qwerty (на датском) на Dvorak, используя AHK, потому что не могу установить пользовательские раскладки клавиатуры на этом компьютере. Так, например, они работают нормально:

:*:n::b  ; remap "n" to "b". This automagically also works for "N"-->"B".
:*:,::w  ; remap comma to lowercase "w".
:*:;::W  ; uppercase comma must be specifically coded.
:*:.::v  ; remap period to lowercase "v".

Пока все хорошо, но это не работает для "двоеточия", которое должно стать прописной буквой "V". Согласно документации, я должен иметь возможность использовать escape-символ, но, возможно, только в выходных данных, а не в триггере? Поскольку это не буквенный ключ, это решение также не работает.

Я пробовал несколько комбинаций:

:*::::V      ; "hotstring is missing its abbreviation"
:*C::::V     ; "hotstring is missing its abbreviation"
:*C: `: ::V  ; this just produces a colon...
:*:`:::V     ; "invalid hotkey"
:*C:`:::V    ; "invalid hotkey"
`:::V        ; "line does not contain a recognized action."

Примечание: конечно, я пробую только один из вышеперечисленных одновременно, но здесь они все показаны, а не закомментированы.

1 ответ1

1

Новые документы AutoHotKey (которые по какой-то причине не связаны со старыми) сохраняют тенденцию устаревших документов усложнять поиск подобных вещей.

Ваш выбор использовать Hotstrings вместо Hotkeys имеет преимущество, заключающееся в том, что строки никогда не будут вызывать друг друга (из Hotstrings):

По умолчанию горячие строки никогда не запускаются нажатиями клавиш, генерируемыми любым скриптом AutoHotkey. Это исключает возможность бесконечного цикла, когда горячие строки запускают друг друга снова и снова. В v1.1.06 и более поздних версиях этим поведением можно управлять с помощью #InputLevel и SendLevel. Однако автозамены горячей замены всегда используют уровень отправки 0 и, следовательно, никогда не вызывают горячие клавиши перехвата или горячие строки.

Я думаю, что SendInput должен работать аналогично, по умолчанию, но я обнаружил, что попытка использовать простую горячую клавишу с SendInput может вызвать срабатывание других горячих клавиш (и использование почти такого же определения с горячей строкой не сработало, вероятно, из-за связанных с двоеточием причуд), поэтому мне пришлось вручную попросить горячую клавишу использовать Keyboard Hook (который устанавливается автоматически из-за использования горячих строк):

#UseHook, On
:::SendInput, V ; Oddly enough, a colon as a hotkey trigger doesn't need 
                ; to be escaped, but a colon in a hotstring, unescaped or
                ; otherwise, just breaks things.
; Wouldn't get triggered by :, even if uncommented (that's good!)
; v::SendInput, colons in AHK are confusing
#UseHook, Off

Вы должны иметь возможность использовать горячие строки для переназначения других клавиш, как вы уже использовали, хотя горячие клавиши могут работать вместо этого, если вы действительно этого хотите, возможно, с #UseHook, как я делал в моем примере выше, и / или #InputLevel / SendLevel.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .