AutoHotKey - Mehrere Befehle werden nicht ausgeführt

AutoHotKey - Mehrere Befehle werden nicht ausgeführt

Ich verwende ein AutoHotKey-Skript, um iTunes mit Standard-Medientasten zu steuern, und es funktioniert großartig, bis auf eine kleine Änderung, die ich versucht habe, vorzunehmen. Ich möchte, dass die Medientaste „Wiedergabe/Pause“ iTunes startet, wenn es noch nicht geöffnet ist, und dann einfach mit der Wiedergabe beginnt. Ich habe sogar eine Verzögerung hinzugefügt, damit es Zeit hat, sich vor dem Wiedergabebefehl zu öffnen.
Dies ist der Code, den ich ausprobiert habe, aber er startet nur iTunes und ich muss die Taste „Wiedergabe/Pause“ ein zweites Mal drücken, um mit der Wiedergabe zu beginnen:

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
}

EDIT: Funktionierender Code proJJohnston2Antwort unten:

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
}

Antwort1

Wenn ich mir den Code nur kurz ansehe, sehe ich nicht, ControlSendan welches Fenster das erste senden soll. Weisen Sie ahk_class iTunesfür das dritte Argument z. B. einen Fenstertitel zu.

Oder versuchen Sie es statt einer Sleep-Anweisung mit WinWaitActive(ggf. gefolgt von einer viel kürzeren SleepAnweisung, wenn WinWaitActivedas nicht ganz funktioniert).

Eine WinWaitActiveAnweisung würde vermutlich das zuletzt gefundene Fenster auf die gleiche Weise festlegen wie IfWInExistim zweiten Codeblock. Das ist meiner Meinung nach der einzige Grund, warum dies tatsächlich funktioniert. ControlSend muss an das zuletzt gefundene Fenster senden, da keines explizit angegeben ist.

verwandte Informationen