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



如何在c++中使用OLE自动化访问Word中ActiveX控件的名称

在c#中,通过OLE Automation访问所有ActiveX控件并收集它们的名称是一项简单的任务。它只需要为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的typelib并获得Shapes,访问它们的OLEFormat,最后访问Object。这个Object似乎没有在Word或Forms都不需要打字。它似乎是所有ActiveX控件的抽象类。问题是,如何从中访问"名称"。此外,ActiveX控件如ComboBox不包含name属性。

所以问题是如何用c++来解决这个问题。

Object没有在Word或Forms的typelib中表示,但是IDispatch::Invoke可以用来查询name

最新更新