1

问题

从 AppleScript 中,我想访问 Adium 聊天窗口中所有聊天的列表,查找特定的聊天名称,但它不起作用:

Adium 的词典包括:[S] Adium > [C] 应用程序 > [E] 聊天窗口

我想我想做的是

tell application "System Events"
  tell application "Adium" to activate
  repeat with tw in chat windows of process "Adium"
    repeat with ch in chats of tw
      if name of ch is "nickserv" then
        -- do some stuff
      end if
    end repeat
  end repeat
end tell

但是我在对“聊天窗口”的引用处收到“语法错误:预期的行尾但找到复数类名”。

答案(来自回复和进一步的工作)

直接从进程中获取窗口列表,而不是从“系统事件”中避免“复数类名”的阻塞:

tell application "System Events"
  repeat with tw in chat windows of process "Adium"
    -- is a syntax error: you're not getting an Adium window, it's a SysEvents window

tell application "Adium"
  repeat with tw in chat windows
    -- works

但是,“系统事件”已知的窗口(或聊天窗口)的属性与 Adium 已知的窗口的属性非常不同。我实际上在做的是将窗口定位在屏幕上。使用系统事件窗口,我执行以下操作:

set position of tw to {440, 1600}
set size of tw to {993, 578}

...但是使用直接的 Adium 窗口,它是

set bounds of tw to {440, 1600, 440+993, 1600+578}

正如劳里·兰塔(Lauri Ranta)的评论中或多或少暗示的那样,洒上“属性tw”揭示了这些差异。

其他答案

我还发现

repeat with tw in (chat windows) of process "Adium"

解决了“多字元素名称”问题,但不是“窗口具有不同属性”问题。

4

2 回答 2

1

您尝试为此使用系统事件。我假设“Adium”是可编写脚本的,因此您可以直接与应用程序对话(使用“AppleScript-Editor.app”打开“Adium.app”以查看是否如此)。

tell application "Adium"
 activate

 -- do stuff

end tell

我不使用 Adium,所以我无法判断脚本的其余部分是否正常,但可以肯定它看起来更像这样:

    tell application "Adium"
     activate

     repeat with tw in chat windows
      repeat with ch in chats of tw

       if name of ch is "nickserv" then
         -- do some stuff
       end if

      end repeat
     end repeat

    end tell
于 2013-06-06T06:50:05.443 回答
1

聊天和聊天窗口元素包含在应用程序元素中:

tell application "Adium"
    properties of chat "nickserv"
    --chat window "nickserv"
end tell
于 2013-06-06T09:07:56.210 回答