AppleScript:当屏幕保护程序运行时,“将最前面设置为真”不起作用?

时间:2015-02-16 07:38:34

标签: applescript

我有一个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似乎不起作用。那么即使屏幕保护程序正在运行,我怎样才能使它工作?

1 个答案:

答案 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循环中运行,当然你不必使用重复循环。

编辑+ 昨晚我真的很累:你可以真的开始测试屏幕保护程序是否正在运行,然后再向前移动,或关闭屏幕保护程序,做你的东西,并再次打开它。