我试图用Python实现Manipulating the zone identifier to specify where a file was download from – The Old New Thing - MSDN blogs。在
在CoCreateInstance
:
pythoncom.CoCreateInstance(
pywintypes.IID('{0968e258-16c7-4dba-aa86-462dd61e31a3}'), #CLSID_PersistentZoneIdentifier
None,pythoncom.CLSCTX_ALL,
pywintypes.IID('{cd45f185-1b21-48e2-967b-ead743a8914e}')) #IID_IZoneIdentifier
我得到一个错误:
^{pr2}$(没有stacktrace,因为这是一个扩展函数)
如果使用相同的 实际上,在 在反汇编了 MSDN将此接口记录为自IE6以来可用。但IE7和IE8都没有。因为这是XP(以及所有据称的更新),我没有其他的东西可以尝试。在 同样,在WindowsSDK7.0中,MSDN文章中提到的 问题是:HKCR\Interface
中,我没有看到像IZoneIdentifier
那样的东西,但确实看到了IPersistFile
。在urlmon.dll
之后,我看到它确实实现了接口,但没有在其DllRegisterServer
中注册它。进一步搜索,我发现IPersistFile
正在由ole32.dll
注册,而不是{urlmon.h
文件中也有该接口。在ole32.dll
和urlmon.dll
属于哪些组件(以便我可以尝试(取消)为它们安装更新)?在
IZoneIdentifier
没有问题。原来的C++程序运行得很好。作为@IgorTandetnik pointed out,并不是对象实现的每个接口都要在注册表中注册,只有那些支持封送的接口才会注册。在错误来自},错误消息总是用英语而不是系统的UI语言)。在
pythoncom
本身(提示是它是TypeError
,而不是{原因是
pythoncom
确实需要接口的IDispatch
支持,否则就无法推断出如何使用接口的函数和它们接受/返回的值。在唯一的例外是许多基于
IUnknown
的接口,对这些接口的支持是在(IPersistFile
中编译的;显然,完整的列表在pythoncom.InterfaceNames
中)。在对其他基于
IUnknown
的接口的支持可以添加到“pythoncom扩展”模块中。关于它们的一些(非常稀少)文档可以在Python and COM - Implementation Details文章中的pywin32
文档中找到。在相关问题 更多 >
编程相关推荐