Ждать в AppleScript, пока документ Photoshop не будет закрыт?
Я сделал скрипт для Preview, и он работает отлично. Это открывает изображение и затем ждет, пока документ в Предварительном просмотре будет закрыт.
После этого я попробовал то же самое с Photoshop, но он там не работает:
tell application "Finder"
try
set appID to application file id "com.adobe.Photoshop"
--set appID to application file id "com.apple.Preview"
on error errMsg
set appID to 0
end try
end tell
tell application "Finder" to set appName to name of appID
tell application appName
run
activate
set fileHandle to open POSIX file pngFile as alias
repeat
-- exit repeat
try
get name of fileHandle
on error
exit repeat
end try
delay 1 -- delay in seconds
end repeat
end tell
display dialog "Document is closed now"
Любые идеи, что идет не так или даже лучше, как проверить в Photoshop, если определенный файл все еще открыт?
1 ответ
Если вы хотите открыть файл и отложить его до момента открытия в Photoshop, у вас возникли проблемы с кодом. Во-первых, если это работает, как вы думаете, то ваша строка "повторение выхода" находится не в том месте. Это не должно быть в "при ошибке" части блока try. Цель вашего цикла повторения и блока try состоит в том, чтобы подождать, пока вы не получите имя файла без ошибок... это означает, что файл открыт... а затем выйти из повторения. Так что ваш повторный цикл должен выглядеть следующим образом...
repeat
try
get name of fileHandle
exit repeat
end try
delay 1 -- delay in seconds
end repeat
Однако в вашем коде есть другие ошибки, поэтому даже с этим исправлением он все равно не будет работать. Одна большая ошибка - fileHandle. Команда open в Photoshop не возвращает ссылку на файл, поэтому, когда вы "получаете имя fileHandle", это приведет к ошибке, несмотря ни на что, потому что fileHandle отсутствует.
Вот как бы я написал ваш код. Вам не нужны какие-либо вещи Finder, и вы, конечно, не должны помещать код Photoshop в код Finder. В любом случае, попробуйте это. Я надеюсь, что это помогает.
set filePath to (path to desktop as text) & "test.jpg"
set fileOpen to false
tell application id "com.adobe.Photoshop"
activate
open file filePath
set inTime to current date
repeat
try
set namesList to name of documents
if "test.jpg" is in namesList then
set fileOpen to true
exit repeat
end if
end try
if (current date) - inTime is greater than 10 then exit repeat
delay 1
end repeat
end tell
return fileOpen