2012-02-11 75 views
1

我試圖製作一個AppleScript,它將同步並彈出我的iPod,而不必在腳本啓動後提供任何輸入。基本的腳本是:如何判斷通過AppleScript完成iPod同步的時間

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」不能被彈出,因爲它包含另一個應用程序正在使用的文件。「並且只有一個「OK」按鈕。只需點擊「彈出」和「確定」,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並引發錯誤。]

回答

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 
+0

我真的發現我可以點擊對話窗口,如果我用Finder彈出而不是iTunes,但是這個解決方案好多了! – 2012-02-12 03:30:03

相關問題