AutoHotkey вопрос.

В общем, я хотел бы видеть, когда CapsLock нажатие одной key будет производить Shift + key На мой вопрос почти ответили в вопросе SuperUser здесь и посте AutoHotkey здесь.

С помощью там, что я могу достичь сейчас

  1. когда CapsLock , нажатие на a приведет к A , а также к другим буквам;
  2. когда CapsLock , нажатие 1 будет производить ! , 2 будет производить @ , а также для других клавиш со смещенными символами, например - = ;

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

Чтобы быть конкретным:

  1. когда CapsLock , нажатие клавиши со стрелкой Right вызовет Shift + Right , а также для Left , Up и Down ;
  2. когда CapsLock , нажатие Ctrl + Right приведет к Ctrl + Shift + Right ;
  3. Фактически, я переназначил ключи с помощью LAlt & L::Send {Right} чтобы Alt + L создавал клавишу со стрелкой Right . Теперь я хочу видеть, когда CapsLock , Alt + L будет производить Shift + Right .

Для вашей информации я выложил решение от Icarus с форума AutoHotkey здесь

#SingleInstance Force

Keys := "abcdefghijklmnopqrstuvwxyz1234567890-=[];'\,./"
Loop parse, keys
    Hotkey $%A_LoopField%, PressKey

Return

PressKey:
    StringReplace ThisHotkey, A_ThisHotkey, $
    If( GetKeyState( "CAPSLOCK", "T" ) )
        SendInput +%ThisHotkey%
    Else
        SendInput %ThisHotkey%  

Return

ESC::ExitApp

Это работает для пункта 1 и пункта 2, но я не знаю, как адаптировать его для клавиш со стрелками для пунктов 3, 4 и 5. Я попытался добавить {Right} к Keys в приведенном выше сценарии, но это не сработает.

Любая помощь высоко ценится!

2 ответа2

1

Как-то удалось решить это самому. В восторге!

Ключ в том, чтобы не ставить Right в фигурные скобки (например, {Right}), когда он стоит слева от :: как originKey .

Решения, соответствующие пунктам с 3 по 5 в моем собственном вопросе:

; Solution to Point 3
Left::SendInput % GetKeyState("CAPSLOCK", "T")  ? "+{Left}"  : "{Left}"
Up::SendInput % GetKeyState("CAPSLOCK", "T")    ? "+{Up}"    : "{Up}"
Down::SendInput % GetKeyState("CAPSLOCK", "T")  ? "+{Down}"  : "{Down}"
Right::SendInput % GetKeyState("CAPSLOCK", "T") ? "+{Right}" : "{Right}"

; Solution to Point 4
LCtrl & Left::SendInput % GetKeyState("CAPSLOCK", "T")  ? "^+{Left}"  : "^{Left}"
LCtrl & Up::SendInput % GetKeyState("CAPSLOCK", "T")    ? "^+{Up}"    : "^{Up}"
LCtrl & Down::SendInput % GetKeyState("CAPSLOCK", "T")  ? "^+{Down}"  : "^{Down}"
LCtrl & Right::SendInput % GetKeyState("CAPSLOCK", "T") ? "^+{Right}" : "^{Right}"

; Solution to Point 5
LAlt & J::SendInput % GetKeyState("CAPSLOCK", "T") ? "+{Left}"  : "{Left}"
LAlt & I::SendInput % GetKeyState("CAPSLOCK", "T") ? "+{Up}"    : "{Up}"
LAlt & K::SendInput % GetKeyState("CAPSLOCK", "T") ? "+{Down}"  : "{Down}"
LAlt & L::SendInput % GetKeyState("CAPSLOCK", "T") ? "+{Right}" : "{Right}"

Там могут быть краткие способы написания вышеуказанного скрипта, что очень приветствуется :)

1
#NoEnv
#SingleInstance Force

/* 
; If your keyboard has no indicator for Caps Lock, you can use this GUI:
Gui, Capslock: -caption +AlwaysOnTop
Gui, Capslock: Add, Text, x5 y5, Capslock is ON
If GetKeyState("Capslock","T")
    Gui, Capslock: Show, x0 y0
*/

Keys := ["Right","Left","Up","Down","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","1","2","3","4","5","6","7","8","9","0","-","=","[","]",",","\",",",".","/",";"]
for each, key in Keys
    Hotkey, $%key%, Shift_Key
return

Shift_Key:
ThisHotkey := StrReplace(A_ThisHotkey, "$")
If GetKeyState("Capslock","T")
    SendInput, +{%ThisHotkey%}
else
    SendInput, {%ThisHotkey%}
return

/* 
~Capslock Up::
If GetKeyState("Capslock","T")
    Gui, Capslock: Show, x0 y0
else
    Gui, Capslock: cancel
return
*/

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