Hi, I need to get the selected layers and groups in my script. I found this .
here is the code:
function getSelectedLayers() { var doc = app.activeDocument; var selIndices = getSelectedLayersIdx(); var selLayers = new Array(); if (selIndices.length == 1) { selLayers.push(doc.activeLayer); } else { for (var i=0; i<selIndices.length; i++) { if (makeActiveByIndex(selIndices[i], false) != -1) selLayers.push(doc.activeLayer); } } return selLayers; } function getSelectedLayersIdx() { var selectedLayers = new Array; var ref = new ActionReference(); ref.putEnumerated(charIDToTypeID('Dcmn'), charIDToTypeID('Ordn'), charIDToTypeID('Trgt')); var desc = executeActionGet(ref); if (desc.hasKey(stringIDToTypeID('targetLayers'))) { desc = desc.getList(stringIDToTypeID('targetLayers')); var c = desc.count; var selectedLayers = new Array(); for (var i=0; i<c; i++) { selectedLayers.push(desc.getReference(i).getIndex()); } } else { var ref = new ActionReference(); ref.putProperty(charIDToTypeID('Prpr'), charIDToTypeID('ItmI')); ref.putEnumerated(charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Trgt')); selectedLayers.push(executeActionGet(ref).getInteger(charIDToTypeID('ItmI'))); } return selectedLayers; } function makeActiveByIndex(idx, forceVisible) { try { var desc = new ActionDescriptor(); var ref = new ActionReference(); ref.putIndex(charIDToTypeID('Lyr '), idx) desc.putReference(charIDToTypeID('null'), ref); desc.putBoolean(charIDToTypeID('MkVs'), forceVisible); executeAction(charIDToTypeID('slct'), desc, DialogModes.NO); } catch(e) { return -1; } }
This works for the layers or when I am trying to select only 1 group. However when I am selecting multiple groups, for some reason it selects the top child layer rather than the group itself. I don't really know much about the ActionManager and can't really understand what is causing the problem.