# 개체 다중선택 명령

**URL:** <https://forum.developer.hancom.com/t/topic/3252>\
**Category:** 한글 오토메이션\
**Created:** [9월 18, 2026, 7:52오전 UTC](https://forum.developer.hancom.com/t/topic/3252 "2026-09-18T07:52:36Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![ncGsep](https://avatars.discourse-cdn.com/v4/letter/n/bc79bd/32.png) [@ncGsep](https://forum.developer.hancom.com/u/ncGsep)\
**Post date:** [9월 18, 2026, 7:52오전 UTC](https://forum.developer.hancom.com/t/topic/3252/1 "2026-09-18T07:52:36Z")

</div>

function OnScriptMacro\_원도형삽입()  
{  
HAction.GetDefault(“DrawObjCreatorEllipse”, HParameterSet.HShapeObject.HSet);  
with (HParameterSet.HShapeObject)  
{  
ShapeDrawFillAttr.GradationAlpha = 0;  
ShapeDrawFillAttr.Type = BrushType(“NullBrush”);  
ShapeDrawFillAttr.WinBrushAlpha = 0;  
ShapeDrawFillAttr.WinBrushFaceStyle = HatchStyle(“None”);  
ShapeDrawFillAttr.WinBrushHatchColor = RGBColor(0, 0, 0);  
ShapeDrawFillAttr.WinBrushFaceColor = RGBColor(255, 255, 255);  
ShapeDrawFillAttr.WindowsBrush = 0;  
ShapeDrawFillAttr.GradationBrush = 0;  
ShapeDrawFillAttr.ImageBrush = 0;  
ShapeDrawFillAttr.ImageAlpha = 0;  
ShapeDrawLineAttr.Alpha = 64;  
ShapeDrawLineAttr.OutLineStyle = HwpOutLineStyle(“Normal”);  
ShapeDrawLineAttr.TailFill = 1;  
ShapeDrawLineAttr.HeadFill = 1;  
ShapeDrawLineAttr.TailSize = EndSize(“SmallSmall”);  
ShapeDrawLineAttr.HeadSize = EndSize(“SmallSmall”);  
ShapeDrawLineAttr.EndCap = 1;  
ShapeDrawLineAttr.TailStyle = EndStyle(“Normal”);  
ShapeDrawLineAttr.HeadStyle = EndStyle(“Normal”);  
ShapeDrawLineAttr.Width = MiliToHwpUnit(2.0);  
ShapeDrawLineAttr.Style = HwpLineType(“Solid”);  
ShapeDrawLineAttr.Color = RGBColor(255, 255, 255);  
ShapeDrawLayOut.CreateItemArray(“CreatePt”, 6);  
ShapeDrawLayOut.CreatePt.Item(0) = 2834;  
ShapeDrawLayOut.CreatePt.Item(1) = 2834;  
ShapeDrawLayOut.CreatePt.Item(2) = 5669;  
ShapeDrawLayOut.CreatePt.Item(3) = 2834;  
ShapeDrawLayOut.CreatePt.Item(4) = 2834;  
ShapeDrawLayOut.CreatePt.Item(5) = 0;  
ShapeDrawLayOut.CreateNumPt = 3;  
TreatAsChar = 0;  
TextWrap = TextWrapType(“InFrontOfText”);  
VertOffset = MiliToHwpUnit(148.5);  
VertAlign = VAlign(“Top”);  
VertRelTo = VertRel(“Paper”);  
HorzOffset = MiliToHwpUnit(105.0);  
HorzAlign = HAlign(“Justify”);  
HorzRelTo = HorzRel(“Paper”);  
HeightRelTo = HeightRel(“Absolute”);  
Height = 5669;  
WidthRelTo = WidthRel(“Absolute”);  
Width = 5669;  
NumberingType = Numbering(“Figure”);  
ShapeDrawShadow.ShadowType = DrawShadowType(“None”);  
ShapeDrawShadow.ShadowColor = RGBColor(178, 178, 178);  
ShapeDrawShadow.ShadowOffsetX = MiliToHwpUnit(0.0);  
ShapeDrawShadow.ShadowOffsetY = MiliToHwpUnit(0.0);  
HSet.SetItem(“ShapeType”, 0);  
TextFlow = TextFlowType(“BothSides”);  
AdjustTextbox = 0;  
ShapeCreationMode = 0;  
ShapeCreationType = 2;  
}  
HAction.Execute(“DrawObjCreatorEllipse”, HParameterSet.HShapeObject.HSet);  
HAction.GetDefault(“DrawObjCreatorEllipse”, HParameterSet.HShapeObject.HSet);  
with (HParameterSet.HShapeObject)  
{  
ShapeDrawFillAttr.GradationAlpha = 0;  
ShapeDrawFillAttr.Type = BrushType(“NullBrush”);  
ShapeDrawFillAttr.WinBrushAlpha = 0;  
ShapeDrawFillAttr.WinBrushFaceStyle = HatchStyle(“None”);  
ShapeDrawFillAttr.WinBrushHatchColor = RGBColor(0, 0, 0);  
ShapeDrawFillAttr.WinBrushFaceColor = RGBColor(255, 255, 255);  
ShapeDrawFillAttr.WindowsBrush = 0;  
ShapeDrawFillAttr.GradationBrush = 0;  
ShapeDrawFillAttr.ImageBrush = 0;  
ShapeDrawFillAttr.ImageAlpha = 0;  
ShapeDrawLineAttr.Alpha = 0;  
ShapeDrawLineAttr.OutLineStyle = HwpOutLineStyle(“Normal”);  
ShapeDrawLineAttr.TailFill = 1;  
ShapeDrawLineAttr.HeadFill = 1;  
ShapeDrawLineAttr.TailSize = EndSize(“SmallSmall”);  
ShapeDrawLineAttr.HeadSize = EndSize(“SmallSmall”);  
ShapeDrawLineAttr.EndCap = 1;  
ShapeDrawLineAttr.TailStyle = EndStyle(“Normal”);  
ShapeDrawLineAttr.HeadStyle = EndStyle(“Normal”);  
ShapeDrawLineAttr.Width = MiliToHwpUnit(1.0);  
ShapeDrawLineAttr.Style = HwpLineType(“Solid”);  
ShapeDrawLineAttr.Color = RGBColor(255, 0, 0);  
ShapeDrawLayOut.CreateItemArray(“CreatePt”, 6);  
ShapeDrawLayOut.CreatePt.Item(0) = 2834;  
ShapeDrawLayOut.CreatePt.Item(1) = 2834;  
ShapeDrawLayOut.CreatePt.Item(2) = 5669;  
ShapeDrawLayOut.CreatePt.Item(3) = 2834;  
ShapeDrawLayOut.CreatePt.Item(4) = 2834;  
ShapeDrawLayOut.CreatePt.Item(5) = 0;  
ShapeDrawLayOut.CreateNumPt = 3;  
TreatAsChar = 0;  
TextWrap = TextWrapType(“InFrontOfText”);  
VertOffset = MiliToHwpUnit(148.5);  
VertAlign = VAlign(“Top”);  
VertRelTo = VertRel(“Paper”);  
HorzOffset = MiliToHwpUnit(105.0);  
HorzAlign = HAlign(“Justify”);  
HorzRelTo = HorzRel(“Paper”);  
HeightRelTo = HeightRel(“Absolute”);  
Height = 5669;  
WidthRelTo = WidthRel(“Absolute”);  
Width = 5669;  
NumberingType = Numbering(“Figure”);  
ShapeDrawShadow.ShadowType = DrawShadowType(“None”);  
ShapeDrawShadow.ShadowColor = RGBColor(178, 178, 178);  
ShapeDrawShadow.ShadowOffsetX = MiliToHwpUnit(0.0);  
ShapeDrawShadow.ShadowOffsetY = MiliToHwpUnit(0.0);  
HSet.SetItem(“ShapeType”, 0);  
TextFlow = TextFlowType(“BothSides”);  
AdjustTextbox = 0;  
ShapeCreationMode = 0;  
ShapeCreationType = 2;  
}  
HAction.Execute(“DrawObjCreatorEllipse”, HParameterSet.HShapeObject.HSet);

}

위와 같은 매크로로 원도형(빨간원, 반투명흰색원) 2개를 삽입했습니다. 그리고 이 두 원을 선택하여 그룹으로 묶어야합니다.

(참고: 그룹묶기 명령-\> HAction.Run(“ShapeObjGroup”); )

하지만 원 2개를 삽입하고 → 원 2개 선택 → 그룹묶기 이 루틴을 한번에 하려면

원 2개를 선택하도록 하는 명령을 하여야 하는데,

ai한테 받은 코드  
// 첫 번째 개체 선택 HAction.Run(“SelectCtrlReverse”); // Shift 추가 선택 상태를 유도하는 액션 HAction.Run(“SelectObject”); HAction.Run(“SelectCtrlReverse”); // 이전 선택을 유지한 채 추가 선택 // 그룹화 HAction.Run(“ShapeObjGroup”);

이거를 포함해서 여러 다른 수많은 답변으로 적용해봐도  
도형은 하나만 선택될 뿐 동시에 선택되는 명령은 아무리 찾아봐도 안나오고 되지가 않네요

혹시 스크립트로는 불가능한 건가요?

---

<div class="post-metadata">

**Author:** ![ygyoun](https://avatars.discourse-cdn.com/v4/letter/y/b4bc9f/32.png) [@ygyoun](https://forum.developer.hancom.com/u/ygyoun)\
**Post date:** [9월 21, 2026, 5:06오전 UTC](https://forum.developer.hancom.com/t/topic/3252/2 "2026-09-21T05:06:24Z")

</div>

안녕하세요  
올려주신 코드 참고해서 말씀하신 내용 반영해서 다시 만들었습니다.  
아래 코드 참고하시고 혹시 추가 문의사항이 있으시면 다시 말씀부탁드립니다.  
감사합니다.

```auto
function OnScriptMacro_원도형삽입()
{
    // [1] 삽입 전 그리기 개체(gso) 목록 스냅샷
    var before = _GetGsoInstIDs();

    // [2] 원 2개 삽입 (테두리색, 선굵기 mm, 투명도)
    _InsertEllipse(RGBColor(255, 255, 255), 2.0, 64); // 반투명 흰색 원
    _InsertEllipse(RGBColor(255, 0, 0), 1.0, 0); // 빨간 원

    // [3] 새로 생긴 개체의 InstID만 추출
    var added = _DiffInstIDs(before, _GetGsoInstIDs());
    if (added.length < 2) {
        return;
    }

    // [4] 두 개체 동시 선택 → 묶기
    // 구분자는 0x02, option 1 = 기존 선택 해제 후 선택
    SelectCtrl(added.join(String.fromCharCode(2)), 1);
    HAction.Run("ShapeObjGroup");
}

// 문서 내 모든 그리기 개체의 InstID 수집
function _GetGsoInstIDs()
{
    var ids = [];
    var ctrl = HeadCtrl;
    while (ctrl) {
        if (ctrl.CtrlID == "gso") {
            var id = ctrl.GetCtrlInstID();
            if (id != null && id != "") {
                ids[ids.length] = String(id);
            }
        }
        ctrl = ctrl.Next;
    }
    return ids;
}

// after - before (JScript에는 Array.indexOf가 없어 직접 비교)
function _DiffInstIDs(before, after)
{
    var added = [];
    for (var i = 0; i < after.length; i++) {
        var found = false;
        for (var j = 0; j < before.length; j++) {
            if (before[j] == after[i]) {
                found = true;
                break;
            }
        }
        if (!found) {
            added[added.length] = after[i];
        }
    }
    return added;
}

// 원 1개 삽입 (원본 매크로의 속성 그대로, 선 속성만 인자화)
function _InsertEllipse(nLineColor, dLineWidthMM, nLineAlpha)
{
    HAction.GetDefault("DrawObjCreatorEllipse", HParameterSet.HShapeObject.HSet);
    with (HParameterSet.HShapeObject)
    {
        ShapeDrawFillAttr.GradationAlpha = 0;
        ShapeDrawFillAttr.Type = BrushType("NullBrush");
        ShapeDrawFillAttr.WinBrushAlpha = 0;
        ShapeDrawFillAttr.WinBrushFaceStyle = HatchStyle("None");
        ShapeDrawFillAttr.WinBrushHatchColor = RGBColor(0, 0, 0);
        ShapeDrawFillAttr.WinBrushFaceColor = RGBColor(255, 255, 255);
        ShapeDrawFillAttr.WindowsBrush = 0;
        ShapeDrawFillAttr.GradationBrush = 0;
        ShapeDrawFillAttr.ImageBrush = 0;
        ShapeDrawFillAttr.ImageAlpha = 0;
        ShapeDrawLineAttr.Alpha = nLineAlpha;
        ShapeDrawLineAttr.OutLineStyle = HwpOutLineStyle("Normal");
        ShapeDrawLineAttr.TailFill = 1;
        ShapeDrawLineAttr.HeadFill = 1;
        ShapeDrawLineAttr.TailSize = EndSize("SmallSmall");
        ShapeDrawLineAttr.HeadSize = EndSize("SmallSmall");
        ShapeDrawLineAttr.EndCap = 1;
        ShapeDrawLineAttr.TailStyle = EndStyle("Normal");
        ShapeDrawLineAttr.HeadStyle = EndStyle("Normal");
        ShapeDrawLineAttr.Width = MiliToHwpUnit(dLineWidthMM);
        ShapeDrawLineAttr.Style = HwpLineType("Solid");
        ShapeDrawLineAttr.Color = nLineColor;
        ShapeDrawLayOut.CreateItemArray("CreatePt", 6);
        ShapeDrawLayOut.CreatePt.Item(0) = 2834;
        ShapeDrawLayOut.CreatePt.Item(1) = 2834;
        ShapeDrawLayOut.CreatePt.Item(2) = 5669;
        ShapeDrawLayOut.CreatePt.Item(3) = 2834;
        ShapeDrawLayOut.CreatePt.Item(4) = 2834;
        ShapeDrawLayOut.CreatePt.Item(5) = 0;
        ShapeDrawLayOut.CreateNumPt = 3;
        TreatAsChar = 0;
        TextWrap = TextWrapType("InFrontOfText");
        VertOffset = MiliToHwpUnit(148.5);
        VertAlign = VAlign("Top");
        VertRelTo = VertRel("Paper");
        HorzOffset = MiliToHwpUnit(105.0);
        HorzAlign = HAlign("Justify");
        HorzRelTo = HorzRel("Paper");
        HeightRelTo = HeightRel("Absolute");
        Height = 5669;
        WidthRelTo = WidthRel("Absolute");
        Width = 5669;
        NumberingType = Numbering("Figure");
        ShapeDrawShadow.ShadowType = DrawShadowType("None");
        ShapeDrawShadow.ShadowColor = RGBColor(178, 178, 178);
        ShapeDrawShadow.ShadowOffsetX = MiliToHwpUnit(0.0);
        ShapeDrawShadow.ShadowOffsetY = MiliToHwpUnit(0.0);
        HSet.SetItem("ShapeType", 0);
        TextFlow = TextFlowType("BothSides");
        AdjustTextbox = 0;
        ShapeCreationMode = 0;
        ShapeCreationType = 2;
    }
    HAction.Execute("DrawObjCreatorEllipse", HParameterSet.HShapeObject.HSet);
}

```
