单击窗口上的特定位置,单击特定按钮并控制窗口是否更改

时间:2019-07-17 07:07:25

标签: window applescript

实际上我有3个关于同一问题的问题:使用applescript控制窗口。

  1. 如果我按下应用程序“ Google Chrome”的“关闭窗口”按钮该怎么办?
  2. 是否可以检查窗口是否更改?例如,查看是否出现弹出窗口或类似的内容...
  3. 如何在窗口中单击特定位置?我的意思是,我知道我可以使用
    tell application "System Events"
        click at {x,y}
    end tell

但是此命令将整个屏幕用作参考系统,我希望它仅在特定窗口上有效。例如,如果我在“ {x,y}”处放“ {1,1}”,则applescript将单击菜单栏上的第一项。我可以对“系统事件”说“ {1,1}”,但在“谷歌浏览器”窗口中单击吗?

2 个答案:

答案 0 :(得分:1)

在applescript GUI脚本中,您可以简单地通过名称或索引来引用元素,并告诉其单击或执行操作。例如,在Chrome的第一个打开的窗口中单击关闭按钮,您可以使用:

tell application "System Events"
    tell process "Google Chrome"
        tell window 1
            tell button 1
                click
            end tell
        end tell
    end tell
end tell

您实际上不需要知道它的物理位置就可以单击它。您只需要知道窗口中的第一个按钮就是关闭按钮即可。

系统事件始终以屏幕像素为单位返回任何元素的位置,因此,如果要根据窗口的位置来获取元素的位置,请获取元素的位置,获取窗口的位置,然后进行一些加法运算或减法(例如,如果要在位置为{100,125}的窗口中单击{5,5},请单击{105,130})

AppleScript并不是真正用来监视GUI更改的,尽管如果您想变得棘手并且知道要查找的更改,可以执行以下操作:

tell application "System Events"
    tell process "..."
        tell window 1's pop up button 3
            repeat until (exists menu 1)
                delay 0.2
            end repeat
            -- menu 1 now exists, so the pop up button is open
        end tell
    end tell
end tell

...但是请注意,这将挂起脚本,直到打开菜单为止。一种更优雅的处理方式是使用一个空闲处理程序编写脚本应用程序,如下所示:

on run
    -- whatever initialization is needed
end run

on idle
    tell application "System Events"
        try
            tell process "..."
                tell window 1's pop up button 3
                    if exists menu 1 then
                        -- menu 1 now exists
                        -- the pop up button is open
                        -- do what must be done
                    end if
                end tell
            end tell
        on error errstr
            display alert "Something went wrong" message "The script sent this error: " & errstr
        end try
    end tell
    return 0.2
end idle

您可以将其保留在后台运行,以监视GUI中的特定更改(“ try”语句用于您正在观看的应用程序退出,窗口关闭或GUI发生意外情况的情况。)

如果还没有打开,请在“脚本编辑器”中打开“系统事件”脚本定义,然后查看Processes Suite。这将向您显示使用GUI脚本可以做的所有事情。

答案 1 :(得分:1)

以下是三个如何使用 AppleScript 关闭 Google Chrome 的前窗口的示例:

注意:以下假设 Google Chrome 在运行每个示例 AppleScript 代码< / em>在脚本编辑器中。

示例一是最直接的方法:

tell application "Google Chrome" to close front window

示例二直接单击关闭按钮

tell application "System Events" to tell ¬
    application process "Google Chrome" to ¬
    click button 1 of front window

示例三计算关闭按钮的中心,然后单击该位置:

activate application "Google Chrome"

delay 0.5

tell application "System Events" to tell ¬
    application process "Google Chrome" to tell ¬
    front window

    set posB1 to (position of button 1)
    set szB1 to (size of button 1)

    set x to (item 1 of posB1) + (item 1 of szB1) / 2 as integer
    set y to (item 2 of posB1) + (item 2 of szB1) / 2 as integer

end tell

tell application "System Events" to click at {x, y}

请注意,在前两个示例中, Google Chrome 的前窗口甚至不必是桌面上的最前窗口;但是,在第三个示例中,确实如此,否则click at {x, y}不会到达预期的 target

那就是说,如果确实有简单的方法(如示例1)来完成工作,则实际上不应该使用示例3。示例三只是一个概念证明,可以单击以获取坐标。在某些情况下,此方法可能很有用,尤其是在不直接支持 AppleScript 的应用中。


注意:示例 AppleScript 代码就是这样,并且不包含任何 error 处理适当。用户有责任添加适当的,需要的或想要的任何错误处理。看看try中的error 声明AppleScript Language Guide 声明。另请参见Working with Errors