我想用iTunes解决以下烦恼:在我搜索了一首曲目后(通过按cmd + opt + f移动到搜索栏)我希望能够播放歌曲列表中的第一首曲目。理想情况下,我希望cmd + enter开始播放歌曲列表中的第一首曲目,并将焦点移动到歌曲列表中。例如,我在搜索框中输入“Highway 61”,按cmd + enter并开始播放“Like a Rolling Stone”。
我最初的想法是将一个苹果脚本从焦点从搜索字段移动到歌曲列表,选择第一首歌并播放它。
这就是我所拥有的:
tell application "iTunes"
set first responder of (window 1) to outline "songs"
end tell
当我尝试运行此脚本时,Applescript Editor会抛出语法错误“Expected class name found identifier”并突出显示responder
。这个脚本的形式与我在网上找到的许多苹果脚本相同。我做错了什么?
旁白/咆哮:Applescript是我曾经愚蠢地给自己造成的最令人沮丧和混乱的技术。我讨厌它。我讨厌它。我讨厌它。我恨它。
答案 0 :(得分:3)
Applescript的语法是特殊的,但在你有一个统一的GUI脚本语言的意义上它并不坏。这是(现在仍然)令人惊奇的事情。一旦你通过Apple的语言定义which can be found here,奇怪的sytanx也就不那么奇怪了。
也就是说,您需要打开每个应用程序的AppleScript字典,以查看定义了哪种名词和动词。 从AppleScript的角度将应用程序视为类和方法库。当然你不能调用一个未在库中定义的方法,对吗?
启动AppleScript编辑器,转到文件→打开字典,然后选择iTunes。你很快就会发现没有定义first responder
这样的名词。
关键是,应用程序通常只公开其内部对象结构,而不是UI的每个元素。但通常这就足够了。
如果使用正确的Applescript界面无法完成您想做的事情,那么作为最后的手段,您可以使用名为“系统事件”的帮助应用程序直接操作UI元素。
因此,再次转到文件→打开字典,这次选择“系统事件”,并检查“进程套件”的内容。它允许您操纵UI。例如,要获取所有UI元素的列表,请使用
tell application "System Events"
tell application process "iTunes"
get UI elements of window 1
end tell
end tell
玩得开心! Applescript对我来说看起来很可怕一段时间,但是一旦我知道我需要总是参考字典,这并不是一件坏事。
Mac OS X Automation是一个很好的教程来源。
答案 1 :(得分:0)
如果我理解正确,您不需要AppleScript来做到这一点。只需按Tab键即可在元素之间移动焦点。在我的情况下,例如,按Tab键将焦点从搜索框移动到左侧选择栏,然后再移动到主歌曲列表,然后再次返回搜索框。
编辑解决您对问题的进一步细化:您可以从搜索到使用两个击键进行游戏 - TAB
将焦点从搜索框移到歌曲列表,然后SPACE
到在选择中播放第一首曲目。您也可以使用箭头键选择不同的选择。
只是为了好玩,这里有一种方法可以在AppleScript中完成整个序列:
tell application "iTunes"
play first item of (search first library playlist for "Highway 61")
end tell
答案 2 :(得分:0)
AFAIK,iTunes未实施命令set first responder of
。 Applescript工作室实现了这样的命令。