如何使用applescript移动第一响应者?

时间:2010-07-07 18:28:40

标签: macos applescript

我想用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是我曾经愚蠢地给自己造成的最令人沮丧和混乱的技术。我讨厌它。我讨厌它。我讨厌它。我恨它。

3 个答案:

答案 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工作室实现了这样的命令。

相关问题