当我的Applescript运行并且屏幕保护程序打开并锁定屏幕时,我收到AppleEvent超时错误。 applescript完成当前操作,当尝试执行下一个Finder操作时,它不会继续但等待并超时。
我无法增加超时时间限制,因为我根本不会解锁屏幕。有没有办法忽略等待屏幕解锁或其他解决方案?
提前致谢。
答案 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
问题必须取决于脚本执行的特定命令。它们是什么?