簡體   English   中英

使用Objective-C獲取Photoshop的動作列表

[英]Get Photoshop's action list using Objective-C

我正在使用C ++和Obj-C編寫與Photoshop交互的OSX應用程序。

我一直在使用帶有動態構建的AppleScript的NSAppleScript來驅動Photoshop(是的,這有點嚇人……)我希望能夠以不同的方式來驅動Photoshop,因此,如果有人知道更好的方法,我很樂意它! 不幸的是,我無法使用ScriptingBridge因為無法將用戶綁定到Leopard。

最大的問題是前一天晚上,當我去從Photoshop查詢動作列表以顯示給用戶時。 顯然,Photoshop的腳本集成不會將操作列表API公開給AppleScript。 這是我不能使用ScriptingBridge的第二個原因。

有誰知道我可以在Obj-C / C ++程序中訪問Photoshop動作列表的方法嗎? 獎勵問題:有人知道我可以與Photoshop進行交互的更好方法嗎?

不確定如何使用AppleScript進行操作,但是可以使用AppleScript調用此JavaScript,以返回給定操作列表中的名稱。 我改編自“ Image Processor.jsx”。

function GetActionList(folderName)
{
    var setCounter = 1;
    var actions = '';
    var actionName;

    gClassActionSet = charIDToTypeID( 'ASet' );
    gClassAction = charIDToTypeID( 'Actn' );
    gKeyName = charIDToTypeID( 'Nm  ' );
    gKeyNumberOfChildren = charIDToTypeID( 'NmbC' );

    while ( true )
    {
        var ref = new ActionReference();
        ref.putIndex( gClassActionSet, setCounter );
        var desc = undefined;
        try { desc = executeActionGet( ref ); }
        catch( e ) { break; }
        actionName = desc.getString( gKeyName );

        var numberChildren = 0;
        if ( desc.hasKey( gKeyNumberOfChildren ) )
            numberChildren = desc.getInteger( gKeyNumberOfChildren );
        if ( numberChildren )
        {
            if(actionName == folderName)
            {
                for ( var i = 1; i <= numberChildren; i++ )
                {
                    var ref = new ActionReference();
                    ref.putIndex( gClassAction, i );
                    ref.putIndex( gClassActionSet, setCounter );
                    var desc = undefined;
                    desc = executeActionGet( ref );
                    if( desc.hasKey( gKeyName ) )
                    {
                        if(actions.length > 0)
                            actions = actions + ',' + desc.getString( gKeyName );
                        else
                            actions = desc.getString( gKeyName );
                    }
                }
                break;
            }
        }
        setCounter++;
    }
    return actions;
}

我認為沒有與Photoshop交互的“更好”的方法。 Applescript是方法。 這就是它的用途。 關於獲取操作列表,我唯一的建議是,這些操作必須位於硬盤驅動器上的某個文件夾中。 每個動作不是一個單獨的文件嗎? 我不確定,但這是值得研究的方法。 也許您可以找出它們所駐留的文件夾,並獲取操作的文件名,並通過查詢文件夾結構來基本上重新創建操作菜單的層次結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM