#user-interface #applescript #script
Вопрос:
Я думаю, что я использую ignoring application responses
неправильно.
Что я хотел бы сделать, так это иметь вложенные действия, которые не зависят от сценариев приложений, в которые они вложены.
В приведенном ниже примере есть цикл повтора, который зависит от application "System Events"
и application process myApp
и т. Д. Но какие бы действия ни происходили в этом цикле, я бы хотел , чтобы они игнорировались application "System Events"
и application process myApp
т. Д. Как мне этого добиться?
set myApp to "someApp" set pPath to POSIX file "/Volumes/myDisk/outputPath" tell application myApp to activate tell application "System Events" tell application process myApp tell window myApp --some code here repeat while progress indicator 1 of sheet 1 exists ignoring application responses set newPath to POSIX file pPath as alias set currentDate to current date end ignoring end repeat --some code here end tell end tell end tell
Возвращаемая ошибка:
get POSIX file (file "myDisk:outputPath:") of application process "somApp" Result: error "No result was returned from some part of this expression."
Здесь я бы ожидал get POSIX file (file "myDisk:outputPath:") of application process "somApp"
, что просто буду get POSIX file (file "myDisk:outputPath:")
.
Ответ №1:
pPath
уже есть POSIX file
, удалите POSIX file
set newPath to pPath as alias
В этом случае с путями HFS все проще
set hPath to "myDisk:outputPath" ... set newPath to alias hPath
Комментарии:
1. Да, ты прав, я думаю, что я перепутал там несколько проблем. Но я не могу найти ни одного ресурса по своей проблеме. Как я могу игнорировать
tell application "System Events"
(и вложенные сообщения), когда у меня есть действия, вложенные в эти инструкции tell, но не связанные с ними?2. Вы можете использовать
tell me
или поместить несвязанный код в отдельный обработчик.
Ответ №2:
Все зависит от того, кому принадлежит команда. Зная, кому принадлежит команда, вы можете перенаправить ее в нужное приложение (или в фреймворки) с помощью вложенного предложения tell. Например, здесь я пытаюсь перенаправить команду (текущая дата) в рамки установленных дополнений скрипта.
set myApp to "someApp" set pPath to POSIX file "/Volumes/myDisk/outputPath" set newPath to pPath as alias tell application myApp to activate tell application "System Events" to tell process myApp to tell window 1 --some code here repeat while progress indicator 1 of sheet 1 exists tell scripting additions to set currentDate to current date end repeat --some code here end tell
Но это не всегда поможет. Правильное и стабильное решение состоит в том, чтобы «отделить» вложенные блоки tell и преобразовать их в отдельные блоки tell. В вашем примере я бы сделал это так:
set myApp to "someApp" set pPath to POSIX file "/Volumes/myDisk/outputPath" set newPath to pPath as alias tell application myApp to activate tell application "System Events" to tell process myApp to tell window 1 --some code here end tell set indicatorExists to true repeat while indicatorExists tell application "System Events" to tell process myApp to tell window 1 set indicatorExists to progress indicator 1 of sheet 1 exists end tell set currentDate to current date -- now this command is not nested end repeat tell application "System Events" to tell process myApp to tell window 1 --some code here end tell
Комментарии:
1. Отлично, теперь я понял: перенаправление или отдельные блоки. В большинстве случаев разделение работает, но я перенаправил цикл в зависимости от рассматриваемого блока tell. Спасибо!