我有一个shell脚本foo.sh
,它将继续在终端窗口中运行。当某些条件为真时,foo.sh
会调用AppleScript bar.osa
以使Thunderbird脱机。以下是bar.osa
脚本(我的第一个苹果脚本):
tell application "System Events" to tell process "Thunderbird"
set frontmost to true
tell menu bar item "File" of menu bar 1
tell menu "File"
tell menu item "Offline"
tell menu "Offline"
set v to (value of attribute "AXMenuItemMarkChar" of menu item "Work Offline") as string
if (v is not equal to "✓") then
click menu item "Work Offline"
end if
end tell
end tell
end tell
end tell
end tell
这在大多数情况下都可以正常工作,但是当屏幕保护程序运行时它不起作用。屏幕锁定时,set frontmost to true
似乎不起作用。那么即使屏幕保护程序正在运行,我怎样才能使它工作?
答案 0 :(得分:1)
我在小牛队,我无法弄清楚屏幕保护程序是否正在运行,我建议你做的就是检查" Thunderbird&#34的最前面属性之后的状态;
我实际上花了一个小时的时间,我希望其他人提出一个解决方案,这是有效的! :)
修改强>
实际上这是我的不好,我认为从系统首选项预览窗格启动ScreenSaver就可以了。 当我从脚本开始运行屏幕保护程序时,它的运行属性就可以了。
tell application id "sevs" -- "System Events"
set itsRunning to false
if (running of screen saver preferences) then
set itsRunning to true
end if
end tell
if itsRunning then
tell application id "com.apple.ScreenSaver.Engine" to quit
end if
所以我建议的解决方案是检查最前面是否正确,如果屏幕保护程序正在运行,然后关闭屏幕保护程序(要求屏幕保护程序没有密码,然后重新运行)将应用程序设置在最前面的代码,然后最终再次启动屏幕保护程序。
try
tell application id "com.apple.ScreenSaver.Engine" to launch
end try
你可以让它在repeat
循环中运行,当然你不必使用重复循环。
编辑+ 昨晚我真的很累:你可以真的开始测试屏幕保护程序是否正在运行,然后再向前移动,或关闭屏幕保护程序,做你的东西,并再次打开它。