在AppleScript中等待,直到Photoshop文档关闭?

时间:2014-04-23 17:37:05

标签: applescript photoshop finder

我为预览制作了一个脚本,它工作得很完美。它会打开图像,然后等待预览中的文档关闭。

之后我尝试用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 个答案:

答案 0 :(得分:2)

如果你想打开文件并延迟文件在Photoshop中实际打开,那么你的代码就会遇到一些问题。首先,如果要按照你的想法工作,那么你的“退出重复”行是在错误的地方。它不应该在try块的“on error”部分。重复循环和try块的目的是等到你可以获得文件的名称而不会出现错误...意味着文件已打开...然后退出重复。所以你的重复循环应该是这样的......

repeat
    try
        get name of fileHandle
        exit repeat
    end try
    delay 1 -- delay in seconds
end repeat

但是,您的代码中还有其他错误,因此即使使用该修复程序,它仍然无效。一个很大的错误是fileHandle。 Photoshop的open命令不会返回对文件的引用,因此当你“获取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