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!

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 :)


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
*/

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.