通过Python的只有部分访问COM类型库(Only partial access to a COM

2019-09-16 16:29发布

我试图写一些脚本来使用与一个应用程序从外部控制它来到一个COM类型库。

不过,我停留在我使用Python库的COM(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我可以呼叫调度上。 其余的回报:

'Class not registered.'

我的问题是两个部分:

1)它是如何可能的对象可以通过COM浏览器,并通过上面的调用来发现两者并用win32com.client.Dispatch不能赎回? [注:有问题的应用程序运行。]

2)我使用了错误的功能? 是调度不正确的? 我坦率地承认,我已经找到了文档Python的COM模块混乱,但我还没有发现其中存在的COM对象将不经任何调度的例子,所以我不知道在哪里可以从这里走。 此外,可以在被派遣的4个对象似乎工作完全文件另有说明。

[最后一点:如果我试图pythoncom.CoCreateInstance(TypeLibCLSID,无,1,GUIDofInterfaceObject)我得到不支持“界面“的关键接口,我需要用的是我想这里的GUID。]

Answer 1:

只有伴生类接口,可以直接使用派遣创建。 其它接口通常是由通过属性和顶层对象的方法下钻创建。 如果你对你的类型库运行makepy,生成的包装文件将标有1个评论共类。



文章来源: Only partial access to a COM Type Library through Python
标签: python com