AutoHotKey - Mehrere Befehle werden nicht ausgeführt

379
Chris M

Ich verwende ein AutoHotKey-Skript, um iTunes mit Standard-Medientasten zu steuern, und es funktioniert großartig, abgesehen von einer Änderung, die ich versucht habe, es hinzuzufügen. Ich möchte, dass die Play / Pause-Medientaste Launch iTunes ist, wenn es noch nicht geöffnet ist, und dann einfach die Wiedergabe startet. Ich habe sogar eine Verzögerung hinzugefügt, sodass vor dem Wiedergabebefehl noch Zeit zum Öffnen wäre.
Dies ist der Code, den ich ausprobiert habe, aber er startet einfach iTunes und ich muss die Play / Pause-Taste ein zweites Mal drücken, um die Wiedergabe zu starten:

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

BEARBEITEN : Arbeitscode pro JJohnston2- Antwort unten:

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

1 Antwort auf die Frage

1
JJohnston2

Ich schaue nur auf den Code und sehe nicht, in welches Fenster das erste gesendet werden ControlSendsoll. Bestimmen Sie ein WinTitle, dh ahk_class iTunesfür das dritte Argument.

Versuchen Sie dies WinWaitActive( oder anstelle einer Schlafanweisung) (möglicherweise gefolgt von einer viel kürzeren SleepAnweisung, wenn WinWaitActiveder Trick nicht vollständig funktioniert).

Eine WinWaitActiveAnweisung würde vermutlich das letzte gefundene Fenster auf dieselbe Weise IfWInExistwie im zweiten Codeblock festlegen. Dies ist der einzige Grund, aus dem ich mir vorstellen kann, dass dies tatsächlich funktioniert. ControlSend muss an das zuletzt gefundene Fenster senden, da keines explizit angegeben wird.

Haha! Jemand im Ahk-Forum schlug "WinWait" vor, und ich bekam es durch das Einfügen von "WinWait, ahk_class iTunes,, 2" vor der `Sleep`-Anweisung zum Laufen. Ich schätze, durch das Hinzufügen dieser Anweisung wird ein Fenster angegeben, an das "ahk_parent" gesendet werden soll. Chris M vor 6 Jahren 0