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 control
ignoriert shift
.
Beispielsweise hatte ich erwartet, Buchstaben mit space
+ shift
+ h
hervorzuheben, ähnlich wie space
+ shift
+ left arrow
.
Ich habe Folgendes versucht: +space & h::send, {left}
und habe die folgende Fehlermeldung erhalten:
BEARBEITEN
Dieses Skript funktioniert mit control
und 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 shift
Modifikators zu finden.
Beispielsweise die space & h
Kombination:
space & h::
if(GetKeyState("Shift", "P")) {
send, +{left}
} else {
send, {left}
}
Return
Ich vermute, Sie gehen wahrscheinlich noch einen Schritt weiter und möchten ctrl
auch 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 Shift
und Control
und dann die einzelnen Modifikatoren überprüfen. Andernfalls würde das Programm zu früh beendet und nur einer der Modifikatoren ausgeführt.