我这样做:
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
。我怎么能做到这一点?
答案 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没有”时,你的意思是什么?它是否在该行上给出错误,或者它是否仅仅检测到窗口?