我正在尝试编写一些脚本来使用应用程序附带的 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。]