我正在尝试创建一个自动关闭Apple Pages最前面窗口的脚本。
on run {}
tell application "System Events"
if (window 1 of process "Pages" exists) then
try
tell application "Pages"
--display dialog "Hello World!" --TODO: remove, test code only.
--Keywords I have tried: file, document, window,
close window 1 saving no
end tell
--close window 1 of process "Pages" saving no
on error errMsg
display dialog "ERROR: " & errMsg
end try
end if
end tell
end run
每当我运行它时,它会给我以下错误:
错误:页面出错:窗口1无法理解“关闭” 消息。
我查看了this article,并使用了以下命令:
sudo defaults write /Applications/Pages.app/Contents/Info NSAppleScriptEnabled -bool YES
然而,它仍然无法工作。有什么建议吗?
详细说明:
系统版本:OS X 10.9.1(13B42)
内核版本:达尔文13.0.0
页数:5.0.1
答案 0 :(得分:1)
如果Pages不是可编写脚本的,那么有点运气不好。如果它是可编写脚本的,则不需要系统事件来关闭窗口;这种功能通常包含在可编写脚本的应用程序字典中。
系统事件可以帮助处理不可编写脚本的应用程序,但您必须依赖实际的UI。但如果这是解决方案,则不能将tell application "Pages"
用于内部块(就像你拥有它一样);你必须使用:
tell process "Pages"
如果你走这条路,现在你必须使用窗口1上的关闭按钮或使用关闭菜单命令。类似的东西:
activate application "Pages"--note that this will probably be NECESSARY (if it's not frontmost, it prob won't work)
tell application "System Events"
tell process "Pages"
click menu item "Close" of menu "File" of menu bar item "File" of menu bar 1 of it
end tell
end tell
但是那么你必须想出如果窗口尚未保存(已被修改)会发生什么的问题 - 在可编写脚本的应用程序中使用你最初尝试的构造。使用系统事件时,您可以执行以下操作:
activate application "Pages"--note that this will probably be NECESSARY (if it's not frontmost, it prob won't work)
tell application "System Events"
tell process "Pages"
click menu item "Close" of menu "File" of menu bar item "File" of menu bar 1 of it
delay .5
keystroke "d" using command down
end tell
end tell
但是又如何使脚本足够智能以了解窗口是否已被修改?或者也许您使用系统事件来查看窗口是否在关闭命令后被杀死,如果没有,则执行击键操作。这种事情可以通过以下方式完成:
activate application "Pages"
tell application "System Events"
tell process "Pages"
set frontMostWinName to name of window 1
click menu item "Close" of menu "File" of menu bar item "File" of menu bar 1 of it
tell me to delay 0.5
if exists window 1 then
if name of window 1 = frontMostWinName then keystroke "d" using command down
end if
end tell
end tell
我没有Pages,但这适用于另一个不可编写脚本的应用程序Bean(虽然我应该提到Bean使用制表符,但我必须将一个制表符移动到一个窗口才能使其工作*,而我不知道Pages在这方面是如何工作的)。 [编辑:*实际上,这不是真的;这适用于Bean而不管选项卡/窗口]