实际上我有3个关于同一问题的问题:使用applescript控制窗口。
tell application "System Events"
click at {x,y}
end tell
但是此命令将整个屏幕用作参考系统,我希望它仅在特定窗口上有效。例如,如果我在“ {x,y}”处放“ {1,1}”,则applescript将单击菜单栏上的第一项。我可以对“系统事件”说“ {1,1}”,但在“谷歌浏览器”窗口中单击吗?
答案 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。