1

私はこのAppleScriptを持っています:

tell application "Finder" to display dialog "derp" -- display a dialog
tell application "System Events" to keystroke return -- dismiss that dialog by simulating the pressing of the "return" key

実行すると、 を使用して「リターン」キーを押すことをシミュレートすることで、ダイアログが閉じられると思いましたkeystroke return。ありがとう。

4

2 に答える 2

4

あなたのスクリプトは機能しません。アプリケーションに何かをするように指示すると、applescript はアプリケーションがそれを行うのを待ってから、残りのコードを実行します。そのため、スクリプトは Finder がタスクを完了するのを待ってから、システム イベント コードに進みます。したがって、基本的にスクリプトでは、ダイアログが閉じられるまでシステムイベントコマンドは実行されません。つまり、この方法でダイアログを閉じることはできません。

ただし、このようなアプリケーションからの応答を待たないようにapplescriptに指示できます...

ignoring application responses
    tell application "Finder"
        activate
        display dialog "blah"
    end tell
end ignoring

delay 0.5
tell application "System Events" to keystroke return

applescript はシングル スレッドであるため、2 つの別々のプロセスを使用する方法もあります。1 つはダイアログを表示し、もう 1 つはダイアログを閉じます。これは、タスクごとに 1 つずつ、2 つの異なる AppleScript で行うことができます。もう 1 つの方法は、シェルを使用して 1 つのプロセスを作成し、そのプロセスをバックグラウンドに送信して、applescript がシェルの終了を待たないようにし、ダイアログを閉じることです。その方法を次に示します。

do shell script "osascript -e 'tell application \"Finder\"' -e 'activate' -e 'display dialog \"blah\"' -e 'end tell' > /dev/null 2>&1 &"
delay 0.5
tell application "System Events" to keystroke return

これを行うにはいくつかの方法があることがわかります。幸運を。

于 2011-07-04T16:32:42.657 に答える
3

"display dialog" コマンドには、giving up after [number][number] 秒後にダイアログを自動的に閉じるパラメーターが含まれています。簡単な例:

tell application "Finder" to display dialog "Quick, press a button!" buttons{"1","2","3"} default button 1 giving up after 5

このコードは、3 つのボタンを含むダイアログを生成します。指定された時間 (この場合は 5 秒) 以内にクリックすれば、どれでもクリックできます。そうしないと、コマンドによって返される「ダイアログ応答」レコードは次のようになります。

{button returned:"1", gave up:true}

これが役立つことを願っています!:)

于 2011-07-04T18:37:25.250 に答える