1

ログイン時よりもスクリプトがあります。ユーザーに映画を見たいかどうか尋ねてください。ほとんどの場合、それはうまく機能します。しかし、時々、そして私にはわからない理由で、AppleEventハンドラーの失敗エラーが発生します。このエラーに関する他の投稿を読んだことがありますが、それらはすべて一意のようです。それで、可能であれば誰かが私のスクリプトを見て、なぜこれが時々ポップアップするのか、そしてそれを防ぐために私ができることがあれば教えてください。

知っておくと役立つかもしれないことの1つは、このエラーが発生したときに失敗するスクリプトの1つは、ムービーが再生されないことです。Quicktimeで開きますが、起動しません。

よろしくお願いします。スクリプトは次のとおりです。

tell application "Welcome" to activate
set question to display dialog "Would you like a welcome video?" buttons {"No, I've seen it", "Yes, please"} default button 2
set answer to button returned of question
if answer is equal to "Yes, please" then tell application "QuickTime Player"
    set theMovie to "Macintosh HD:Library:Desktop Pictures:Mac ML Opening Chalkbaord Video.mov"
    set openMovie to open theMovie
    present openMovie
    play openMovie
    delay 30
    quit
end tell
if answer is equal to "No, I've seen it" then tell application "Welcome"
    quit
    tell application "System Events"
        delete login item "Welcome"
    end tell
end tell
4

1 に答える 1

2

私の推測では、映画を開いてから再生するまでにおそらく遅延が必要だと思います。コンピューターが反応するよりも速くコードが実行される場合があります。その場合、コードがムービーを再生するように指示したときに、ムービーがまだ開こうとしている可能性があります...したがってエラーです。そのため、コードの次のステップに進む前に、それらが使用可能であることを確認するためにチェックする2つの繰り返しループを追加しました。また、単に「開く」のではなく、コードに「ファイルを開く」必要があります。

アプリケーションに何かをするように指示するifステートメントでのアプローチは珍しいものです。私はそれをしません。また、ifステートメントを1つのif /elseifステートメントに結合します。とにかく、これが私があなたのコードを書く方法です(私はアプリケーション「ようこそ」がコード自体であると仮定しています)。これがお役に立てば幸いです。

set theMovie to "Macintosh HD:Library:Desktop Pictures:Mac ML Opening Chalkbaord Video.mov"

tell me to activate
set question to display dialog "Would you like a welcome video?" buttons {"No, I've seen it", "Yes, please"} default button 2
set answer to button returned of question

if answer is equal to "Yes, please" then
    tell application "QuickTime Player"
        activate
        set openMovie to open file theMovie

        -- delay until the movie opens
        set startTime to current date
        repeat until exists document 1
            delay 0.2
            if (current date) - startTime is greater than 10 then return -- a precaution so you don't get stuck in the repeat loop forever
        end repeat

        present openMovie
        play openMovie

        -- delay until the movie stops playing
        repeat until document 1 is not playing
            delay 1
        end repeat

        quit
    end tell
else if answer is equal to "No, I've seen it" then
    tell application "System Events" to delete login item "Welcome"
end if
于 2012-09-19T21:25:52.540 に答える