Я пытаюсь повторитьTouchCursorклавиши с помощью AutoHotkey, но я не могу заставить его работать с несколькими модификаторами.
Вот что у меня есть на данный момент (изhttps://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
Приведенный выше скрипт отлично работает для перемещения курсора с помощью клавиш «h», «j», «k» и «l», но он игнорирует клавиши control
и .shift
Например, я ожидал выделить буквы, используя space
+ shift
+ h
для выделения слева, аналогично space
+ shift
+ left arrow
.
Я попробовал: +space & h::send, {left}
и получил следующую ошибку:
РЕДАКТИРОВАТЬ
Этот скрипт будет работать с control
и 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
решение1
Вам нужно будет использоватьесли утверждениесGetKeyStateфункция для захвата дополнительных модификаторов. В частности, для нахождения P
(физического состояния) модификатора shift
.
Например, space & h
комбинация:
space & h::
if(GetKeyState("Shift", "P")) {
send, +{left}
} else {
send, {left}
}
Return
Я подозреваю, что вы, вероятно, пойдете на шаг дальше и захотите реализовать модификатор ctrl
. Вам нужно будет расширить оператор if и быть осторожным с тем, как он выполняется.
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
Сначала необходимо проверить ключевые состояния Shift
и Control
, а затем отдельные модификаторы, в противном случае работа будет завершена слишком рано и будет выполнен только один из модификаторов.