【发布时间】:2012-05-04 09:22:50
【问题描述】:
我正在尝试编写一些脚本来使用应用程序附带的 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 浏览器中,但我可以调用 Dispatch 的 81 个可用对象中的 4 个。其余返回:
'Class not registered.'
我的问题分为两部分:
1) 对象怎么可能既可以通过 COM 浏览器也可以通过上述调用找到,而不能使用 win32com.client.Dispatch 调用? [注意:有问题的应用程序正在运行。]
2) 我是否使用了错误的功能?派送不正确吗?我坦率地承认,我发现 Python COM 模块的文档令人困惑,但我没有找到任何未调度现有 COM 对象的示例,因此我不知道从哪里开始。此外,可以分派的 4 个对象似乎完全按照文档中的说明工作。
[最后一点:如果我尝试 pythoncom.CoCreateInstance(TypeLibCLSID, None, 1, GUIDofInterfaceObject) 我得到“不支持接口。”我需要使用的关键接口是我在这里尝试的 GUID。]
【问题讨论】: