2010-09-09 1 views
2

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

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

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

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

ответ

2

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

+0

Это довольно интригующая идея, на самом деле. Я даже не подумал об этом. Я должен дать ему шанс. – Miquella

+0

Хм ... они не хранятся как отдельные действия. Они хранятся в наборах действий (например, все «Действия по умолчанию» хранятся в одном файле). Я мог бы посмотреть на анализ файлов действий, но я не уверен, что до этого до сих пор ... – Miquella

+0

Насколько я могу судить, нет способа получить список действий, если вы не сможете выяснить, как интерпретировать файл atn или каким-то образом прочитать экран, вам придется найти другой способ ... может потребоваться, чтобы пользовательский sot только помещал одно действие в набор, чтобы набор имел то же имя, что и действие? idk надеюсь, что поможет вам каким-то образом держать нас в курсе – mcgrailm

2

Не знаете, как это сделать с помощью 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; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^