如何在C++中利用OLE Automation访问Word中ActiveX控件的名称

ecbunoof  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(212)

如何在C++中利用OLE Automation访问Word中ActiveX控件的名称
通过OLE Automation访问所有ActiveX控件并收集它们的名称在C#中是一项简单的任务。它只需要添加Word和Microsoft Forms的COM引用,您可以迭代ShapesInlineShapesOLEFormat.Object使您可以访问ActiveX控件,成员name包含其在Word中的名称。

using Word = Microsoft.Office.Interop.Word;
using Forms = Microsoft.Vbe.Interop.Forms;

static void Main(string[] args)
{ 
    Word.Document doc = wordApp.Documents.Open("sample.docm");

    foreach (Word.Shape shape in doc.Shapes)
    {
        String name = shape.OLEFormat.Object.name;
        Console.WriteLine(name);
    }
}

问题是如何在c中做到这一点。可以使用Word的类型库并获取Shapes,访问它们的OLEFormat,最后访问Object。这个Object似乎根本没有在Word或Forms类型库中表示。它似乎是所有ActiveX控件的抽象类。问题是,如何从它访问“名称”。此外,像ComboBox这样的ActiveX控件不包含name属性。
所以问题是如何用C
解决这个问题。

kqlmhetl

kqlmhetl1#

Object没有在Word或Forms的类型库中表示,但是IDispatch::Invoke可以用于查询name

相关问题