屏幕锁定时Applescript超时

屏幕锁定时Applescript超时,applescript,Applescript,当我的Applescript运行时,屏幕保护程序打开并锁定屏幕,我收到一个AppleEvent超时错误。applescript完成当前操作,当尝试执行下一个查找器操作时,它不会继续,而是等待并超时 我不能增加超时时间限制,因为我根本不会解锁屏幕。有没有办法忽略等待屏幕解锁或其他解决方案 提前感谢。我不知道如何绕过锁定的屏幕,使代码继续工作,但是您可以使用if语句,这样当屏幕保护程序运行时,代码就不会执行。这至少可以防止超时错误。例如,假设您出于某种原因希望运行重复循环10次,并且希望在屏幕保护程

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

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


提前感谢。

我不知道如何绕过锁定的屏幕,使代码继续工作,但是您可以使用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


我只是用Python+做了一个测试来编写脚本而不是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) 

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

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

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

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

我希望即使屏幕保护程序正在运行,代码也能运行。这就是我的代码的外观:告诉应用程序“Finder”重复(一些文件作为字符串)到(一些文件夹作为字符串)替换删除某些文件后,第一个重复命令将起作用。但是delete命令不起作用。等待屏幕解锁时超时。我收到的最好答案(来自macscripter.net)是使用shell命令而不是Finder命令来避免超时。可能它试图显示确认或授权对话框。Shell命令不会这样做,是的。但是请记住,当Finder的“delete”命令将项目移动到垃圾箱时,“rm”命令会立即删除它们,而无需求助。我(从macscripter.net)收到的最佳答案是使用shell命令而不是Finder命令来避免此超时