Verwenden von 3 oder mehr Modifikatortasten in AutoHotkey zum Replizieren des TouchCursor-Leertastenauslösers

Verwenden von 3 oder mehr Modifikatortasten in AutoHotkey zum Replizieren des TouchCursor-Leertastenauslösers

Ich versuche zu replizierenTouchCursorTasten mit AutoHotkey, aber ich kann es nicht mit mehreren Modifikatoren zum Laufen bringen.

Das ist, was ich bisher habe (vonhttps://autohotkey.com/boards/viewtopic.php?t=6525):

space & g::Send, {esc}
space & l::send, {right}
space & k::send, {up}
space & j::send, {down}
space & h::send, {left}
space & p::send, {backspace}
space & m::send, {delete}
space & u::send, {home}
space & o::send, {end}
space::
Send, {space}
return

Mit dem obigen Skript lässt sich der Cursor mit den Tasten „h“, „j“, „k“ und „l“ problemlos bewegen, die Tasten „und“ werden jedoch controlignoriert shift.

Beispielsweise hatte ich erwartet, Buchstaben mit space+ shift+ hhervorzuheben, ähnlich wie space+ shift+ left arrow.

Ich habe Folgendes versucht: +space & h::send, {left}und habe die folgende Fehlermeldung erhalten:

Bildbeschreibung hier eingeben

BEARBEITEN

Dieses Skript funktioniert mit controlund shift:

; Right, Shift+Right, Control+Right, Shift+Control+Right
space & l::
    if((GetKeyState("Shift", "P") and (GetKeyState("Control", "P")))) {
        send, +^{right}
    } else if(GetKeyState("Shift", "P")) {
        send, +{right}
    } else if(GetKeyState("Control", "P")) {
        send, ^{right}
    } else {
        send, {right}
    }
Return

; Up, Shift+Up, Control+Up, Shift+Control+Up
space & k::
    if((GetKeyState("Shift", "P") and (GetKeyState("Control", "P")))) {
        send, +^{up}
    } else if(GetKeyState("Shift", "P")) {
        send, +{up}
    } else if(GetKeyState("Control", "P")) {
        send, ^{up}
    } else {
        send, {up}
    }
Return

; Down, Shift+Down, Control+Down, Shift+Control+Down
space & j::
    if((GetKeyState("Shift", "P") and (GetKeyState("Control", "P")))) {
        send, +^{down}
    } else if(GetKeyState("Shift", "P")) {
        send, +{down}
    } else if(GetKeyState("Control", "P")) {
        send, ^{down}
    } else {
        send, {down}
    }
Return

; Left, Shift+Left, Control+Left, Shift+Control+Left
space & h::
    if((GetKeyState("Shift", "P") and (GetKeyState("Control", "P")))) {
        send, +^{left}
    } else if(GetKeyState("Shift", "P")) {
        send, +{left}
    } else if(GetKeyState("Control", "P")) {
        send, ^{left}
    } else {
        send, {left}
    }
Return

; Home, Shift+Home, Control+Home, Shift+Control+Home
space & u::
    if((GetKeyState("Shift", "P") and (GetKeyState("Control", "P")))) {
        send, +^{home}
    } else if(GetKeyState("Shift", "P")) {
        send, +{home}
    } else if(GetKeyState("Control", "P")) {
        send, ^{home}
    } else {
        send, {home}
    }
Return

; End, Shift+End, Control+End, Shift+Control+End
space & o::
    if((GetKeyState("Shift", "P") and (GetKeyState("Control", "P")))) {
        send, +^{end}
    } else if(GetKeyState("Shift", "P")) {
        send, +{end}
    } else if(GetKeyState("Control", "P")) {
        send, ^{end}
    } else {
        send, {end}
    }
Return

; Backspace, Shift+Backspace
space & p::
    if(GetKeyState("Control", "P")) {
        send, ^{backspace}
    } else {
        send, {backspace}
    }
Return

; Simple modifiers
space & g::Send, {esc} 
space & m::send, {delete}

; Allow space bar to go through if pressed without holding
space::
Send, {space}
return

Antwort1

Sie benötigen einenif-Anweisungmit demSchlüsselstatus abrufenFunktion zum Erfassen der zusätzlichen Modifikatoren. Insbesondere um den P(physischen Zustand) des shiftModifikators zu finden.

Beispielsweise die space & hKombination:

space & h::
    if(GetKeyState("Shift", "P")) {
        send, +{left}
    } else {
        send, {left}
    }
Return

Ich vermute, Sie gehen wahrscheinlich noch einen Schritt weiter und möchten ctrlauch den Modifikator implementieren. Sie müssten die if-Anweisung erweitern und auf die Art und Weise achten, wie die if-Anweisung ausgeführt wird.

space & h::
    if((GetKeyState("Shift", "P") and (GetKeyState("Control", "P")))) {
        send, +^{left}
    } else if(GetKeyState("Shift", "P")) {
        send, +{left}
    } else if(GetKeyState("Control", "P")) {
        send, ^{left}
    } else {
        send, {left}
    }
Return

Sie müssen zuerst die Schlüsselzustände von Shiftund Controlund dann die einzelnen Modifikatoren überprüfen. Andernfalls würde das Programm zu früh beendet und nur einer der Modifikatoren ausgeführt.

verwandte Informationen