我正在尝试制作一个同步和弹出iPod的AppleScript,而不必在脚本启动后提供任何输入。基本脚本是:
set ipodList to {}
tell application "iTunes"
try
set ipodList to (name of every source whose kind is iPod)
end try
repeat with ipodName in ipodList
update ipodName
eject ipodName
end repeat
end tell
此脚本的问题在于它会导致iTunes在同步开始后立即尝试弹出iPod,因此同步还没有完成。这会导致有时出现一个,有时两个对话窗口。一个窗口说“iTunes正在同步iPod。你确定要弹出它吗?”并有两个按钮,“取消”和“弹出”。另一个窗口显示“iPod”nanoBot“无法弹出,因为它包含其他应用程序正在使用的文件。”并且只有一个“确定”按钮。只需单击“弹出”和“确定”,iTunes就会完成iPod的同步,然后将其弹出。
我想使用UI脚本来点击这两个按钮,以便iTunes能够做我想做的事情。事实上,以下脚本似乎做了我想要的事情:
tell application "System Events"
tell process "iTunes"
try
click button "Eject" of window 1
end try
try
click button "OK" of window 1
end try
end tell
end tell
但是,我通过从第二个AppleScript运行它来测试第二位代码。第一个AppleScript的执行挂起了弹出命令,直到我点击两个对话框(如果它只挂在更新命令上,所有这些烦恼都将被解决......)。
有没有办法在弹出命令的同一个脚本中单击对话框?或者某种方式从第一个启动第二个Applescript并让它继续检查这些对话框窗口,然后点击它们?或者这个问题只是一些更简单的解决方案吗?
[编辑:我应该补充一点,我目前所做的只是将iPod与更新命令同步,暂停几秒钟,然后用Finder弹出iPod(我把它设置为磁盘驱动器)。这种方法的问题是无法判断同步完成的时间,如果不是,则脚本不会弹出iPod并引发错误。]
答案 0 :(得分:1)
试试这个......
set ipodList to {}
tell application "iTunes"
try
set ipodList to (name of every source whose kind is iPod)
end try
repeat with ipodName in ipodList
update ipodName
tell me to wait_for_sync()
eject ipodName
end repeat
end tell
on wait_for_sync()
tell application "System Events" to tell application process "iTunes"
set theStatusText to ""
repeat until theStatusText is "iPod sync is complete."
set theStatusText to value of static text 1 of scroll area 1 of window "iTunes"
delay 1
end repeat
end tell
end wait_for_sync