再現しようとしていますタッチカーソル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
使用する必要がありますif文とともにキーステートを取得追加の修飾子をキャプチャする関数。具体的には、修飾子P
の (物理的な状態)を見つけますshift
。
たとえば、次のspace & h
組み合わせ:
space & h::
if(GetKeyState("Shift", "P")) {
send, +{left}
} else {
send, {left}
}
Return
おそらく、さらに一歩進んで、ctrl
修飾子も実装したいと思うでしょう。if ステートメントを拡張し、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
、次に個々の修飾子をチェックする必要があります。そうしないと、終了が早すぎて、修飾子の 1 つしか実行されなくなります。