Ждать в 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
Другие вопросы по тегам