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 control
y shift
.
Por ejemplo, esperaba resaltar letras usando space
+ shift
+ h
para resaltar a la izquierda de manera similar a space
+ shift
+ left arrow
.
Lo intenté: +space & h::send, {left}
y obtuve el siguiente error:
EDITAR
Este script funcionará con control
y 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 shift
modificador.
Por ejemplo, la space & h
combinació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 ctrl
modificador 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 Shift
y Control
, y luego los modificadores individuales, de lo contrario, saldría demasiado pronto y solo ejecutaría uno de los modificadores.