Uso de 3 o más teclas modificadoras en AutoHotkey para replicar el disparador de espacio TouchCursor

Uso de 3 o más teclas modificadoras en AutoHotkey para replicar el disparador de espacio TouchCursor

Estoy tratando de replicarCursor táctilteclas usando AutoHotkey, pero no puedo hacer que funcione con múltiples modificadores.

Esto es lo que tengo hasta ahora (desdehttps://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

El script anterior funciona bien para mover el cursor usando 'h', 'j', 'k' y 'l', pero ignora las teclas controly shift.

Por ejemplo, esperaba resaltar letras usando space+ shift+ hpara resaltar a la izquierda de manera similar a space+ shift+ left arrow.

Lo intenté: +space & h::send, {left}y obtuve el siguiente error:

ingrese la descripción de la imagen aquí

EDITAR

Este script funcionará con controly 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

Respuesta1

Necesitará utilizar unsi declaracióncon elObtener estado clavefunción para capturar los modificadores adicionales. Específicamente para encontrar el P(estado físico) del shiftmodificador.

Por ejemplo, la space & hcombinación:

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

Sospecho que probablemente irás un paso más allá y querrás implementar el ctrlmodificador también. Debería ampliar la declaración if y tener cuidado con la forma en que se ejecuta.

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

Primero debe verificar los estados clave de Shifty Control, y luego los modificadores individuales, de lo contrario, saldría demasiado pronto y solo ejecutaría uno de los modificadores.

información relacionada