Używanie AutoHotkey do zmiany CapsLock w Shift Lock dla klawiszy strzałek

0

Pytanie AutoHotkey.

Ogólnie chciałbym zobaczyć, kiedy CapsLockjest włączony, naciśnięcie jednego keyspowoduje wygenerowanie Shift+ key. Prawie odpowiedź na moje pytanie znajduje się w pytaniu SuperUser tutaj oraz w wpisie AutoHotkey tutaj .

Z pomocą tamtego mogę teraz osiągnąć

  1. gdy CapsLockjest włączony, naciśnięcie aspowoduje wytworzenie Ai podobnie dla innych liter;
  2. gdy CapsLockjest naciśnięcie 1będzie produkować !, 2by wytwarzać @, a także innych przycisków z przesuniętych symboli, na przykład - =;

Szczególną częścią mojego pytania jest to, że chcę zobaczyć, jak to się dzieje z klawiszami strzałek.

Aby być konkretnym:

  1. gdy CapsLockjest włączona, naciskając Rightklawisz strzałki przyniosłoby Shift+ Right, a także do Left, Uporaz Down;
  2. gdy CapsLockjest włączony, naciśnięcie Ctrl+ Rightspowoduje Ctrl+ Shift+ Right;
  3. W rzeczywistości zmieniłem przypisanie klawiszy LAlt & L::Send {Right}, aby Alt+ Lwygenerował Rightklawisz strzałki. Teraz chcę zobaczyć, kiedy CapsLockjest włączony, Alt+ Lwygeneruje Shift+ Right.

Dla twojej informacji umieściłem tutaj rozwiązanie Icarus z forum 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

Działa dla punktu 1 i punktu 2, ale nie wiem, jak dostosować go do klawiszy strzałek dla punktów 3, 4 i 5. Próbowałem dołączyć {Right}do Keyspowyższego skryptu, ale to nie działa.

Każda pomoc jest mile widziana!

pstryk
źródło

Odpowiedzi:

1

Jakoś sam to rozwiązałem. Podekscytowany!

Kluczem jest, aby nie wkładać Rightnawiasów klamrowych (jak {Right}), gdy stoi po lewej stronie ::jako originKey.

Rozwiązania odpowiadające punktom 3–5 w moim własnym pytaniu:

; 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}"

Mogą istnieć zwięzłe sposoby napisania powyższego skryptu, co jest bardzo mile widziane :)

pstryk
źródło
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
*/
użytkownik3419297
źródło
Dzięki! Bardzo mało wiem o składni AHK. Czy musimy to pisać tak "a","b","c","d","e","f","g", czy możemy to tak napisać, "abcdefg"a następnie jakoś dodać "Right"do listy?
fleix
Zalecam stosowanie tablic (obiektów) zamiast metod alternatywnych. Tablice zapewniają wiele funkcji, których nie mają inne metody.
user3419297