AutoHotkeyで3つ以上の修飾キーを使用してTouchCursorスペーストリガーを複製する


1

AutoHotkeyを使用してTouchCursorキーを複製しようとしていますが、複数の修飾子で動作させることはできません。

これは私がこれまでに持っているものです(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」を使用してカーソルを動かすのにうまく機能しますがcontrolshiftキーとキーを無視します。

例えば、私が使用して文字強調するために期待していた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

回答:


2

追加の修飾子をキャプチャするには、GetKeyState関数でifステートメントを使用する必要があります。具体的には、修飾子の(物理状態)を検索します。Pshift

たとえば、次の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

あなたは、キーの状態をチェックする必要があるShiftControl、それ以外の場合は、あまりにも早く終了し、唯一の修飾のいずれかを実行します最初にして、個々の修飾子を。


ありがとう、これはまさに私が必要なものです。完全なスクリプトを質問に投稿します。
木材

#Ifディレクティブを使用して、状況依存ホットキーを作成することもできます(#If基準を持つホットキーバリアントは常に優先されます)。
user3419297
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.