これを試してみてください:
#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の場合は、上記のコードとまったく同じ、より簡潔な文字を送信します。
'2 ::'は 'Hotkey'コマンドを呼び出すことができます。この問題のために作られたもので、 'a' /' d'の動作を変更することができます。 – Blauhirn