AppleScript - взаимодействие с диалоговым окном - PullRequest
1 голос
/ 04 июля 2011

У меня есть этот 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. Спасибо.

Ответы [ 2 ]

4 голосов
/ 04 июля 2011

Ваш скрипт не будет работать.Когда вы говорите приложению сделать что-то, appleScript ждет, пока приложение сделает это, прежде чем будет выполнен остальной код.Таким образом, сценарий ожидает, пока Finder завершит свою задачу, прежде чем перейти к коду системных событий.Таким образом, по сути, в вашем скрипте команда системных событий не запускается до тех пор, пока диалоговое окно не будет закрыто, что означает, что вы никогда не сможете закрыть диалоговое окно таким способом.

Однако вы можете сказать applecript не ждать ответа отПриложение, как это ...

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 является однопоточным, другой способ будет использовать два отдельных процесса.Один, чтобы показать диалог и второй, чтобы закрыть диалогВы можете сделать это с двумя различными текстовыми кодами, по одному для каждой задачи.Другой способ - использовать оболочку для создания одного процесса, затем вы отправляете этот процесс в фоновый режим, чтобы 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

Итак, вы видите, что есть несколько способов сделать это.Удачи.

3 голосов
/ 04 июля 2011

Команда «display dialog» включает параметр giving up after [number], который автоматически закрывает диалоговое окно через [число] секунд.Быстрый пример:

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

Этот код создает диалоговое окно, содержащее три кнопки.Вы можете щелкнуть любой из них, пока вы делаете это в течение указанного времени (в данном случае, 5 секунд).Если вы этого не сделаете, запись «ответ в диалоге», возвращаемая командой, будет выглядеть примерно так:

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

Надеюсь, это поможет!:)

...