2

我正在尝试编写一些脚本来使用应用程序附带的 COM 类型库来从外部控制它。

但是,我一直在使用用于 COM 的 Python 库(pythoncom 和 win32com):

使用 COM 浏览器,我可以导航以找到我有兴趣使用的类型库的 GUID。

使用 pythoncom,我可以轻松地浏览此类型库以查看可用的对象。

>>> import win32com.client
>>> import pythoncom
>>> type_lib_iid = '{12345678-ABCD-EFGH-1234-12341234}'
>>> lib = pythoncom.LoadTypeLib(type_lib_iid, 1, 0)
>>> for index in range(0, lib.GetTypeInfoCount()):
        print lib.GetDocumentation(index)[0]
        print lib.GetTypeInfo(index).GetTypeAttr().iid

这将返回所有可用 COM 对象的 GUID(对不起,如果我正在扼杀这个词汇表)。

奇怪的是,当我浏览类型库时,此调用返回的所有对象都出现在 COM 浏览器中,而在可用的 81 个对象中,只有 4 个可以调用 Dispatch。其余返回:

'Class not registered.'

我的问题分为两部分:

1)如何通过 COM 浏览器和上述调用找到对象,而不能使用 win32com.client.Dispatch 调用对象?[注意:有问题的应用程序正在运行。]

2)我是否使用了错误的功能?派送不正确吗?我坦率地承认,我发现 Python COM 模块的文档令人困惑,但我没有找到任何未调度现有 COM 对象的示例,所以我不知道从哪里开始。此外,可以分派的 4 个对象似乎完全按照文档中的说明工作。

[最后一点:如果我尝试 pythoncom.CoCreateInstance(TypeLibCLSID, None, 1, GUIDofInterfaceObject) 我得到“不支持接口。”我需要使用的关键接口是我在这里尝试的 GUID。]

4

1 回答 1

0

只有 CoClass 接口可以直接使用 Dispatch 创建。其他接口通常是通过深入了解顶级对象的属性和方法来创建的。如果你在你的 typelib 上运行 makepy,生成的包装文件将用注释标记 CoClass。

于 2012-04-23T20:17:37.307 回答