10

我正在尝试编写一个调整所有打开窗口大小的applescript 脚本。为了确保我可以访问所有窗口,我让我的脚本说出应用程序的名称以及该应用程序的打开窗口数。
有趣的是,当我听到所有打开的应用程序的名称时,我的脚本说它们都打开了 0 个窗口。我该如何解决这个问题?

这是我的代码:

tell application "System Events"
    repeat with theProcess in (every process)
        if background only of theProcess is false then
            if name of theProcess is not "Finder" then
                if name of theProcess is "Google Chrome" then
                    say "Chrome woo hoo"
                    say (count windows as string)
                else
                    say name of theProcess as string
                    say (count windows as string)
                    tell theProcess
                        repeat with theWindow in windows
                            say "found a window of"
                            say (name of theProcess) as string
                            tell theWindow
                                click button 2
                            end tell
                        end repeat
                    end tell
                end if
            end if
        end if
    end repeat
end tell

我在 Mac OS X 10.7.5 上,使用 automator 2.2.4 编写/运行这个 applescript

4

2 回答 2

6

你必须告诉进程计算窗口。毕竟是进程知道它的窗口,而不是系统事件。

您已经告诉进程说出它的名称,例如“将进程的名称说成字符串”,但是您只使用“说(将窗口计数为字符串)”......没有进程与此相关。尝试“计算进程的窗口”。基本上你有一些台词,有时你会告诉过程,有时你不会,有时你会告诉过程,即使你已经告诉了过程,所以你做了两次。那就是你有“说(进程的名称)作为字符串”的地方,但该代码在“告诉进程”块内,所以它已经被告知进程。

真的,您需要仔细检查您的代码并更加精确。提示...如果您想单击窗口中的按钮,则该窗口必须位于屏幕的最前面,否则您无法单击它。另一个提示......“名称”已经是一个字符串,所以你不需要将它强制转换为一个字符串。

顺便说一句,我同意 Michael Dautermann 对您的帖子的评论……您将无法访问某些流程。但随着你的进步,你会发现这一点。

以下是我将如何编写您的代码。基本上我会在开始时使用“tell theProcess”块来获取所有变量。然后我可以用这些变量做一些事情。我希望这会有所帮助。请注意,我只将进程放在最前面,这意味着如果它打开了多个窗口,它只会单击前面窗口上的一个按钮。您必须添加代码以使每个窗口都显示在最前面,然后才能单击其按钮。祝你好运。

tell application "System Events"
    repeat with theProcess in processes
        if not background only of theProcess then
            tell theProcess
                set processName to name
                set theWindows to windows
            end tell
            set windowsCount to count of theWindows

            if processName is "Google Chrome" then
                say "Chrome woo hoo"
                say windowsCount as text
            else if processName is not "Finder" then
                say processName
                say windowsCount as text
                if windowsCount is greater than 0 then
                    repeat with theWindow in theWindows
                        say "found a window of " & processName
                        tell theProcess
                            set frontmost to true
                            tell theWindow
                                click button 2
                            end tell
                        end tell
                    end repeat
                end if
            end if
        end if
    end repeat
end tell
于 2013-01-27T22:04:36.193 回答
4

我在 Mavericks 上创建了所有可见应用程序打开窗口的列表,如下所示:

tell application "System Events"
    set this_info to {}
    repeat with theProcess in (application processes where visible is true)
        set this_info to this_info & (value of (first attribute whose name is "AXWindows") of theProcess)   
    end repeat
    this_info -- display list in results window of AppleScript Editor 
end tell

您需要允许任何使用它的应用程序访问辅助功能下的界面。

于 2014-10-04T19:02:31.700 回答