如何检查进程的窗口是否存在于AppleScript中?

时间:2014-11-17 09:58:12

标签: applescript

我这样做:

tell application "System Events" to click button "Reply" of window 1 of process "Notification Center"

如果没有窗口,会出现异常。所以我尝试了这个:

if exists (window 1 of process "Notification Center") then
    tell application "System Events" to click button "Reply" of window 1 of process "Notification Center"
end if 

但似乎在某种情况下,AppleScript不会window 1 of process。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:5)

首先,一个简单的测试表明,AppleScript 可以在条件下执行window 1 of process。我用它测试了它:

tell application "System Events"
    if exists (window 1 of process "Safari") then
        display dialog "Found window 1"
    end if
end tell

如果在Safari中打开了任何窗口,它将显示对话窗口,否则将不显示。所以问题出在其他地方。

事实上,当我输入此消息时,会出现一条通知,让我知道我可以参观一下“OS X优胜美地的新功能”,所以我把它作为一个机会跑了:

tell application "System Events"
    if exists (window 1 of process "Notification Center") then
        display dialog "Found window 1"
    end if
end tell

它实际上显示了对话框;在我按下关闭通知后,同样的脚本检测到一个窗口,然后显示对话框。

这是一个脚本,它将创建自己的通知窗口,然后尝试检测它:

display notification "Hello"

--without a delay, this script will not immediately notice the window
delay 1

tell application "System Events"
    if exists (window 1 of process "Notification Center") then
        display dialog "Found window 1"
    end if
end tell

如果删除或注释掉delay 1行,在我写这篇文章的有限测试中,它将不会检测到存在窗口。

这让我怀疑你试图与之交谈的过程不是通知中心,或者更有可能的是,你试图与它进行快速交谈。

如果您是自己创建通知,或者在显示通知后立即对其进行响应,则可能需要延迟才能检测到通知。 (如果期望通知窗口出现和实际出现之间的时间不确定,则可能需要将延迟和条件放入循环中。)

当你说“AppleScript没有”时,你的意思是什么?它是否在该行上给出错误,或者它是否仅仅检测到窗口?