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

Kit*_*nde 3 applescript

我这样做:

tell application "System Events" to click button "Reply" of window 1 of process "Notification Center"
Run Code Online (Sandbox Code Playgroud)

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

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 
Run Code Online (Sandbox Code Playgroud)

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

Jer*_*ton 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
Run Code Online (Sandbox Code Playgroud)

如果在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
Run Code Online (Sandbox Code Playgroud)

它确实显示了对话框; 我按下了关闭通知后,相同的脚本并没有检测到一个窗口,然后显示对话框.

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

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
Run Code Online (Sandbox Code Playgroud)

如果您删除或注释掉该delay 1行,在我写入此限定测试时,它将不会检测到存在该窗口.

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

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

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