如何在c++中使用OLE自动化访问Word中ActiveX控件的名称
在c#中,通过OLE Automation访问所有ActiveX控件并收集它们的名称是一项简单的任务。它只需要为Word和Microsoft Forms添加COM引用,您可以迭代Shapes
或InlineShapes
。OLEFormat.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
。