AutoHotKey - 複数のコマンドが実行されない

AutoHotKey - 複数のコマンドが実行されない

私は AutoHotKey スクリプトを使用して、標準メディア キーで iTunes を制御していますが、1 つの調整を加えようとした以外はうまく機能しています。再生/一時停止メディア キーで、iTunes がまだ開いていない場合は iTunes を起動し、再生を開始するようにしたいのです。再生コマンドの前に開く時間を確保するために、遅延も追加しました。
これは私が試したコードですが、iTunes を起動するだけで、再生を開始するには再生/一時停止キーをもう一度押す必要があります。

Media_Play_Pause::
IfWinNotExist, ahk_class iTunes
{
Run %ProgramFiles%\iTunes\iTunes.exe
Sleep, 4000
ControlSend, ahk_parent, {SPACE}  ; play/pause toggle
return
}

IfWinExist, ahk_class iTunes
{
ControlSend, ahk_parent, {SPACE}  ; play/pause toggle
return
}

編集: 作業コードジョンストン2以下に回答してください:

Media_Play_Pause::
IfWinNotExist, ahk_class iTunes
{
Run %ProgramFiles%\iTunes\iTunes.exe
WinWaitActive, ahk_class iTunes, ,2
Sleep, 2000
ControlSend, ahk_parent, {SPACE}  ; play/pause toggle
return
}

IfWinExist, ahk_class iTunes
{
ControlSend, ahk_parent, {SPACE}  ; play/pause toggle
return
}

答え1

ControlSendコードをざっと見たところ、最初の引数がどのウィンドウに送信されるべきかわかりません。3ahk_class iTunes番目の引数に WinTitle を指定します。

または、 sleep ステートメントの代わりに、 try (完全に機能しない 場合は、WinWaitActiveさらに短いステートメントを続ける可能性があります)。SleepWinWaitActive

ステートメントWinWaitActiveは、おそらくコードの 2 番目のブロックと同じ方法で最後に見つかったウィンドウを設定するでしょうIfWInExist。これが、これが実際に機能する唯一の理由であると考えられます。ControlSend は、明示的に指定されていないため、最後に見つかったウィンドウに送信する必要があります。

関連情報