我想创建一个脚本,根据当前播放的曲目启动一个新的 Genius 播放列表,以供 LaunchBar 使用。遗憾的是,iTunes 不向 AppleScript 公开任何与 Genius 相关的功能,这让事情变得很困难。
我搜索了网络并找到了几个解决方案,这些解决方案涉及手动在 iTunes UI 中查找按钮并调用点击事件(例子),但它们无法在 iTunes 10 中运行,并且我的 AppleScript-fu 还不够强大,无法调试它们。
有没有办法从 iTunes 应用程序之外启动 Genius 播放列表?其他方法(如 Automator 工作流程或 shell 脚本)也完全可以接受。
答案1
经过一些实验,我想我找到了解决方案。
tell application "System Events"
-- click the genius button on the currently playing track at top
click button 14 of window "iTunes" of application process "iTunes"
end tell
通过更多的实验,我发现了以下几点:
- 按钮 1-3 是左上角的“红绿灯”
- 按钮 4-7 是左下角的按钮,添加播放列表、随机播放、重复、关闭艺术品。
- 按钮 8 似乎是屏幕右下角的天才按钮(关闭!),将适用于当前选定的曲目。我猜你想为当前播放的曲目设置天才按钮……
- 按钮 9 是右侧的天才窗格。
- 按钮 10-12 是倒带、播放/暂停、前进。
- 按钮 13 是均衡器。
- 按钮 14 是天才按钮!(您想要的按钮)
- 按钮 15 用于选择(并转到)曲目。
- 按钮 16-19 是各种“查看”按钮
- 按钮 20 为零音量。
- 按钮 21 是最大音量。
- 按钮22错误!
就是这样。感谢您提出这个问题,这种见解将有助于各种脚本编写想法。:)
编辑:
好的,对字典进行进一步的研究后,我得到了这个想法:
tell application "System Events"
set button_count to count every button of window "iTunes" of application process "iTunes"
repeat with i from 1 to button_count
set button_description to accessibility description of button i of window "iTunes" of application process "iTunes"
if button_description is "genius" then
set x to i
end if
end repeat
if enabled of button x of window "iTunes" of application process "iTunes" then
click button x of window "iTunes" of application process "iTunes"
end if
end tell
它的作用是循环浏览 iTunes 窗口的所有按钮并检查按钮的可访问性描述。不出所料,天才按钮的描述为“天才”。
在某些视图中,有两个天才按钮,一个用于当前播放的歌曲,一个用于所选歌曲。脚本将始终选择两个按钮中最新的一个,即当前播放的歌曲。因此,此 AppleScript 将检查天才按钮是否已启用,然后单击它。
如果当前没有正在播放的歌曲,但有选定的歌曲,则会出现一个天才按钮,该按钮将被启用并被点击。如果没有正在播放或选定的歌曲,则不会点击天才按钮。
我认为这是您想要的功能!如果它对您有用,请告诉我。