屏幕锁定时Applescript超时

时间:2011-03-09 19:03:46

标签: applescript

当我的Applescript运行并且屏幕保护程序打开并锁定屏幕时,我收到AppleEvent超时错误。 applescript完成当前操作,当尝试执行下一个Finder操作时,它不会继续但等待并超时。

我无法增加超时时间限制,因为我根本不会解锁屏幕。有没有办法忽略等待屏幕解锁或其他解决方案?

提前致谢。

5 个答案:

答案 0 :(得分:1)

我收到的最佳答案(来自macscripter.net)是使用shell命令而不是Finder命令来避免此超时。

答案 1 :(得分:0)

我不知道如何绕过锁定的屏幕,以便您的代码继续工作,但是您可以使用if语句,以便在屏幕保护程序运行时,您的代码不会被执行。这至少可以防止超时错误。例如,假设您想出于某种原因运行10次重复循环,并且您希望在屏幕保护程序运行时不运行某些代码......您可以这样做。

set i to 0
repeat
    set screenSaverEngineIsRunning to false

    tell application "System Events"
        if (exists process "ScreenSaverEngine") then set screenSaverEngineIsRunning to true
    end tell

    if not screenSaverEngineIsRunning then
        set i to i + 1
        -- do some code here
    end if

    delay 1
    if i is 10 then exit repeat
end repeat

答案 2 :(得分:0)

答案 3 :(得分:0)

我刚刚使用Python + Appscript进行测试而不是Applescript,当用户被暂停时(即进入登录窗口但是与用户一起)它继续在我的系统上运行仍然登录)或者屏幕保存是否正在运行。这是一个简单的脚本,但可能会证明你需要做什么。

Appscript附带了ASTranslate,它将Applescript调用转换为等效的Python + Appscript调用。它不处理变量,但通常你可以做一些切割和粘贴来弄清楚如何转换你的脚本。它真的很快,而且Python是一种比Applescript更优秀的脚本语言。

 #!/usr/bin/python

import sys, os
from appscript import *
import time


def gettodos():
    cs = app(u'iCal').calendars.get()
    for c in cs:
        print c.name()
        tds = c.todos()
        for t in tds:
            print "  ", t.summary()

def test():
    for i in range(1,1000):
        print
        print "Run # " + str(i)
        print
        gettodos()
        time.sleep(10)



if __name__ == '__main__':
    test()

    # change to 0 for success, 1 for (partial) failure
    sys.exit(0) 

答案 4 :(得分:0)

我无法重现你的问题。我尝试了以下脚本,即使在屏幕保护程序运行时也能正常工作。

delay 10
tell application "Finder"
    name of startup disk
end tell
delay 5
tell application "Finder"
    contents of startup disk
end tell

问题必须取决于脚本执行的特定命令。它们是什么?