2016-05-03 4 views
2

私の目標は、WASDをキーボードの4つの矢印ボタンにマッピングし、zが終了している間にスクリプトを一時停止させることです。それは十分に簡単でした。今度はadが条件付きでのみ適用されます。私はドキュメントを見て、何が間違っているのか分かりません。私はどちらかのif文を間違って使うか、Left/Rightがif文で動かないと思います。その場合は何をすべきか分かりません。オートホットキーのトグルキー

#SingleInstance 
a::if(UseAD) Left 
d::if(UseAD) Right 
1::Suspend 
2::UseAD:=!UseAD 
w::Up 
s::Down 
z::ExitApp 
+0

'2 ::'は 'Hotkey'コマンドを呼び出すことができます。この問題のために作られたもので、 'a' /' d'の動作を変更することができます。 – Blauhirn

答えて

1

これを試してみてください:

#SingleInstance 
$a::Send % UseAD ? "{Left}" : "a" 
$d::Send % UseAD ? "{Right}" : "d" 
1::Suspend 
2::UseAD:=!UseAD 
w::Up 
s::Down 
z::ExitApp 

オーケー、今ブレークダウン。

Ifステートメントが正しく評価されていませんでした。条件が満たされた後、次のコード行が実行されます。ように:

If (true) 
    do this 

あなたのHotkeyは複数行のステートメントでも間違っています。基本的に1つのホットキーは、基本的にその行に指定されたキーまたはキーの送信コマンドです(割り当て/関数/コマンドなどを指定しない限り)。送信コマンドとして機能します。 If評価に複数の行が必要な場合あなたがホットキーを指定し、複数行にあなたが必要になりますし、サブルーチン同じマルチ裏地ホットキーから戻らなければならない評価をしたいときは:

a:: 
    Code goes here 
    more code 
    etc.. 
Return 

b::AnotherHotkey 

etc.. 

わかりましたので、あなたのコードでは、このロジックをプラグインすることができます:

#SingleInstance 
a:: 
    if(UseAD) 
     Left 
return 

d:: 
    if(UseAD) 
     Right 
return 

1::Suspend 
2::UseAD:=!UseAD 
w::Up 
s::Down 
z::ExitApp 

これを実行すると、送信コマンドとして動作するホットキーの代わりにサブルーチンとして動作するので、左にテキストを送信するように指定する必要があるため、

a:: 
    if(UseAD) 
     Send, Left 
return 

しかし、これは、今、我々がそうのように私たちの名前のキーの周りにブラケットを追加する必要がありますので、再び..代わりに左Keyの左側の単語を送っています、どちらか正しくない:

a:: 
    if(UseAD) 
     Send, {Left} 
return 

さて、とUseADがFalseのときBが送られていないので、我々はElseそうなどと指定することで、それらをSendする必要があります。今、私たちはこのコードを実行

a:: 
    if(UseAD) 
     Send, {Left} 
    else 
     Send, a 
return 

と押しまたはbこのコードでは、ホットキーがInfinateループでトリガーされているため、Max Hotkeys reachedメッセージが表示されます。私たちはそうのように、それ自体をトリガしないような方法で私たちのコードを指定する必要があります。

$a:: 
    if(UseAD) 
     Send, {Left} 
    else 
     Send, a 
return 

あなたは私達が私達のホットキーの前に$記号を追加した気付いた場合、これはそのホットキーにキーボードフックを追加しますスクリプトがそのホットキー自体を起動させないようにします。これは完全な作業スクリプトですが、投稿した最初のコードとはまったく異なります。それは私ができるなら、私は少ない行を入力するのが好きだからです。

最初のコードサンプルでは、​​SendコマンドとTernaryでForced Expression%を使用していますか? :UseADを評価し、trueの場合はLeftキーを送信します。falseの場合は、上記のコードとまったく同じ、より簡潔な文字を送信します。

関連する問題