如何将第一响应者与applescript一起移动?

问题描述:

我想通过iTunes解决以下问题:在搜索完一首曲目后(通过按cmd + opt + f移至搜索字段),我希望能够播放歌曲列表中的第一首曲目。理想情况下,我希望cmd + enter可以开始播放歌曲列表中的第一首曲目,并将焦点移至歌曲列表中。例如,我在搜索框中输入“61号高速公路”,按cmd +回车键,然后开始播放“喜欢滚石”。如何将第一响应者与applescript一起移动?

我最初的想法是将焦点从搜索字段移动到歌曲列表,选择第一首歌曲并播放它。

这是我有:

tell application "iTunes" 
    set first responder of (window 1) to outline "songs" 
end tell 

当我尝试运行此脚本的AppleScript编辑器抛出一个语法错误“预期的类名发现标识符”,并强调responder。该脚本遵循与我在网上找到的许多applescript相同的形式。我究竟做错了什么?撇开/咆哮:Applescript是我曾经对自己造成过愚蠢的最令人沮丧和困惑的技术。我讨厌它。我讨厌它。我讨厌它。我讨厌它。

+0

而不是根据UI窗口系统,您可以表达您在iTunes术语中要做的事情吗?然后,可以更容易地建议是否可以在适当的iTunes专用AppleScript代码片段中执行所需的操作。 – 2010-07-07 19:22:38

+0

@Ned Deily - 我已经添加了一个开头段落来解释我最终想要达到的目标。 – 2010-07-07 19:54:15

Applescript的语法是特殊的,但从GUI的统一脚本语言来说它并不坏。这是(现在仍然)是令人惊讶的事情。一旦你通过苹果的语言定义which can be found here,奇怪的sytanx也并不奇怪。

也就是说,您需要打开每个应用程序的AppleScript Dictionary以查看定义了哪种名词和动词。 从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

很好的建议。请记住,如果应用程序不提供自己有用的Apple Events界面,则操纵UI元素是最后一招。 iTunes *确实*提供了一个有用的界面,所以你可能不需要在这个级别工作。看到我上面的评论。 – 2010-07-07 19:27:20

+0

我衷心地同意你所说的话。 – Yuji 2010-07-07 19:36:10

+0

谢谢。这给了我一些工作。 – 2010-07-07 19:55:14

如果我理解正确,你不需要AppleScript来做到这一点。只需按下Tab键即可在元素之间移动焦点。例如,在我的情况下,按下Tab键将焦点从搜索框移到左侧选择栏,然后移到主要歌曲列表,然后再次返回到搜索框。

编辑解决您对问题的进一步细化:您可以从搜索到使用两个键击 - TAB将焦点移出搜索框到歌曲列表,然后SPACE播放选区中的第一首曲目。您也可以使用箭头键选择不同的选择。

只是为了好玩,不过,这里有一个方法,你可以在AppleScript的做全序列:

tell application "iTunes" 
    play first item of (search first library playlist for "Highway 61") 
end tell 
+0

你是对的,标签完美工作(尽管奇怪的不是在网格视图)。然而,我解释了我的问题做了一件糟糕的工作,所以这并没有解决这个问题。我已经更新了这个问题。 – 2010-07-07 20:55:14

+0

似乎适用于我的任何观点:列表,网格或封面流程。 – 2010-07-07 21:03:59

据我所知,iTunes不能执行命令set first responder of。 Applescript工作室执行这样的命令。