2015-04-08 11 views
1

Почему следующий Applescript скрывает редактор сценариев?Редактор скриптов скрывается при указании другого приложения на закрытие/скрытие

tell application "Last.fm" to launch 
tell application "System Events" to tell process "Last.fm" to keystroke "h" using command down 

Этот код, который я нашел, скроет «Last.Fm», но также скрывает редактор сценариев. В идеале, я хочу, чтобы заменить keystroke "h" с keystroke "w", но затем я получаю сообщение об ошибке:

The document can’t be closed while the script is running.

Почему сценарий я написал эффект редактор сценариев?

+0

На моей машине имя этого приложения/процесса - «Last.fm Scrobbler». Может быть, ваши проблемы вызваны неправильным названием? Просто догадаться ... – matt

+0

@matt Я не думаю, что у меня есть неправильное имя, потому что если Last.fm не работает, он действительно открывает last.fm (это то, что я хочу) –

+0

Имя приложения (для запуска) и имя процесса (для вождения с помощью графического интерфейса пользователя через System Events) - это разные вещи. Посмотрите в Activity Monitor, и вы увидите, что он называется «Last.fm Scrobbler». Не могли бы вы просто попробовать и посмотреть, не изменилось ли это? – matt

ответ

1

У меня нет Last.fm, поэтому я попытался это:

tell application "TextEdit" to launch 
delay 2 
tell application "System Events" to tell process "TextEdit" to keystroke "h" using command down 

И, конечно, это правда, TextEdit была скрыта, но так было Редактор сценариев.

Тогда я попытался это:

tell application "TextEdit" to launch 
tell application "TextEdit" to activate 
delay 2 
tell application "System Events" to tell process "TextEdit" to keystroke "h" using command down 

TextEdit был скрыт, но редактор сценариев не было. Поэтому я бы предположил, что это тоже поможет в вашем коде. Наличие целевого приложения frontmost кажется критическим (что в конечном итоге делает определенный смысл).

+0

Что-то очень интересное - при выполнении этой работы как cron - на самом деле скрывает любое активное окно, которое у меня открыто, всякий раз, когда он запускается. Все, что я хочу, это использовать приложение Last.fm (или любое приложение), если оно не работает, и не отображаться, чтобы оно ничем не мешало. Я собираюсь удалить код скрыть и посмотреть, что произойдет, потому что он скрывает мои окна ха-ха. –

+0

«он действительно скрывает любое активное окно, которое у меня открыто, всякий раз, когда он запускается» Не удивительно, действительно. В конце концов, что такое GUI-скриптинг? Вы просто сообщаете системе действовать как призрак пользователя: вы говорите ему, чтобы он набирал Command-H. Так что, что бы командование-H не делало в тот момент, вот что происходит. Ну, что делает Command-H? Он скрывает все, что находится впереди. – matt

+0

это, безусловно, имеет смысл. В итоге я изменил свой код, чтобы просто показать его, и удалил скрытую часть. Спасибо за вашу помощь! –

0

Какова функциональность, которую вы пытаетесь достичь здесь? Это весь сценарий? Вы хотите запустить last.fm, а затем, в идеале, закрыть окно?

tell application "System Events" to tell process 

не работает, потому что это вводит в заблуждение, - это не фактически направлять нажатие клавиши для конкретного приложения, нажатие клавиши идет туда, куда он идти будет, когда он ударил независимо от «сказать процесс» заявление, что раздражает.

Я не использую last.fm, но любой из этих работ для меня:

tell application "TextEdit" 
    launch 
    activate 
end tell 
delay 0.1 
tell application "System Events" 
    keystroke "w" using command down 
end tell 

или

tell application "TextEdit" 
    launch 
    activate 
end tell 
delay 0.1 
tell application "System Events" 
    click menu item "Close" of menu 1 of menu bar item "File" of menu bar 1 
end tell 

Обратите внимание, что если вы планируете запустить скрипт из ключа команды или меню сценария и не хотите, чтобы он украл фокус на last.fm, вы можете запустить его, закрыть окно (или скрыть его), а затем вернуть вас в переднее приложение при запуске скрипта:

set appPath to the path to the frontmost application 
tell application "Finder" 
    set appName to the name of file appPath 
    set appName to text 1 thru ((offset of "." in appName) - 1) of appName 
end tell 
tell application "TextEdit" 
    launch 
    activate 
end tell 
delay 0.1 
tell application "System Events" 
    keystroke "w" using command down 
end tell 
tell application appName to activate 

 Смежные вопросы

  • Нет связанных вопросов^_^