Получить список действий Photoshop с помощью Objective-C - PullRequest
2 голосов
/ 09 сентября 2010

Я пишу приложение для OSX с использованием C ++ и Obj-C, которое взаимодействует с Photoshop.

Я использую NSAppleScript с динамически создаваемыми сценариями AppleScripts для управления Photoshop (да, это немного страшно ...) Мне бы хотелось иметь возможность управлять Photoshop по-другому, поэтому, если кто-нибудь знает лучший способ, Я открыт для этого! К сожалению, я не могу использовать ScriptingBridge, так как не могу привязать своих пользователей к Leopard.

Большая проблема возникла как-то вечером, когда я отправил запрос в список действий из Photoshop для отображения моим пользователям. По-видимому, интеграция скриптов в Photoshop не предоставляет API списков действий для AppleScript. Что является второй причиной, почему я не могу использовать ScriptingBridge.

Кто-нибудь знает, как я могу получить доступ к списку действий Photoshop в моей программе Obj-C / C ++? Бонусный вопрос: кто-нибудь знает, как лучше взаимодействовать с Photoshop?!

Ответы [ 2 ]

2 голосов
/ 16 апреля 2012

Не уверен, как это сделать с AppleScript, но вы можете вызвать этот JavaScript с помощью AppleScript, чтобы вернуть имена в заданном списке действий.Я адаптировал это из "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;
}
2 голосов
/ 09 сентября 2010

Не думаю, что есть «лучший» способ взаимодействия с фотошопом.Applescript - это путь.Вот для чего он был построен.Что касается получения списка действий, мое единственное предложение было бы, чтобы действия были расположены в папке где-то на жестком диске.Разве каждое действие не является отдельным файлом?Я не уверен в этом, но этот подход стоит рассмотреть.Возможно, вы сможете выяснить, в каких папках они находятся, и получить имена файлов действия и в основном воссоздать иерархию меню действий, запросив структуру папки.

...