AppleScript:获取所有桌面上的窗口列表

wfa*_*ulk 5 user-interface applescript automation window osx-lion

我需要计算每个应用程序的所有窗口.我试图这样做的每一种方式,我只得到分配给当前(任务控制)桌面的窗口数.(我目前正在运行Mac OS X 10.7,所以后空间.)有没有办法在所有桌面上获得所有窗口的每个应用程序数量?

我试过的关键:

tell application "System Events"
  repeat with _app in (every process whose visible is true)
    tell _app
      log (name as string) & ": " & (count of every window)
    end tell
  end repeat
end tell
Run Code Online (Sandbox Code Playgroud)

请注意,该whose visible is true子句不是问题.它找到了所有适当的进程,但是一旦我询问了windows的进程,它们只计算活动桌面中的进程.

我试过把log线拉出来tell并使用name of _appcount of every window of _app,但是没有区别.我尝试过除了processes 以外的东西System Events,但是任何有用的东西最终都会有效地成为获得同一个对象的另一种方式.我已经尝试过迭代UI elements,但没有窗口显示不在当前桌面上,虽然我确实为每个应用程序获得了菜单栏.

我很好地迭代所有桌面(虽然实际上没有切换到所有桌面),但我甚至找不到获取桌面列表的方法. 这个答案声称描述了如何做到这一点,但我只在里面得到一个元素every desktop.并不是说有一个明显的方法来获得Windows,无论如何你有这个桌面对象.

值得指出的是台式机是由Dock控制的,而不是由Mission Control控制的.我不知道AppleScript与Dock交谈的方式,所以如果你知道某些事情,那么对此的回答或评论可能会帮助我指出正确的方向.

我想做一些不可能的事吗?

Joe*_*era 1

我运行了你的代码,将 Applescript 版本设置为 2.4(作为一种习惯这样做);第一次运行时,您的代码向我提供了每个应用程序所有窗口的适当数量。

这段代码是我尝试过的,结果似乎令人满意。有什么我没看到的吗?

use AppleScript version "2.4" -- Yosemite (10.10) or later
use scripting additions


tell application "System Events"
    set my_list to {}
    repeat with _app in (every process whose visible is true)
        tell _app
            log (name as string) & ": " & (count of every window)
            set my_list to my_list & {name as string, count of every window}
        end tell
    end repeat
    log my_list
end tell
Run Code Online (Sandbox Code Playgroud)