Manipulating the zone identifier to specify where a file was download from – The Old New Thing - MSDN blogsをPythonで実装しようとしています。 CoCreateInstance
でpythoncom.CoCreateInstanceはIZoneIdentifierを作成できません。 MSDNで文書化されているにもかかわらず、インターフェイスもレジストリに存在しません
:
pythoncom.CoCreateInstance(
pywintypes.IID('{0968e258-16c7-4dba-aa86-462dd61e31a3}'), #CLSID_PersistentZoneIdentifier
None,pythoncom.CLSCTX_ALL,
pywintypes.IID('{cd45f185-1b21-48e2-967b-ead743a8914e}')) #IID_IZoneIdentifier
私はエラーを取得:私はIZoneIdentifier
IIDを交換する場合
TypeError: There is no interface object registered that supports this IID
(このようませスタックトレースは、拡張機能ではありません)
をpythoncom.IID_IUnknown
またはpythoncom.IID_IPersistFile
、それは動作しますが、右のIIDを持つQueryInterface
が同じエラーで失敗します。
実際、HKCR\Interface
では、IZoneIdentifier
のようなものは表示されませんが、IPersistFile
が表示されます。 urlmon.dll
を分解した
、私はそれが実際にインタフェースを実装していますが、そのDllRegisterServer
に登録していないことがわかります。さらに検索すると、IPersistFile
はole32.dll
で登録されていますが、IZoneIdentifier
では登録されていません。
MSDNこのインターフェイスは、IE6以降で使用できることを文書化しています。しかし、それはIE7かIE8のどちらにもありません。これはXPだからといって(すべての更新があると思われます)、私はもう何も試していません。
同様に、インターフェイスはWindows SDK 7.0のMSDNの資料に記載されているurlmon.h
ファイルに存在します。
質問は次のとおりです。
- は、このインタフェースは黙っMSDNがそのか何かを反映せずに何か他の賛成で落としましたか?あるいは、これは既知の問題ですか? IEのそれ以降のバージョンで利用できますか?
ole32.dll
とurlmon.dll
のコンポーネントは何ですか(更新プログラムをインストールしようとしていますか?)
すべてのインターフェイスがレジストリに記載されているわけではありません。マーシャリングをサポートするインターフェイスのみがサポートされています(インターフェイスを登録するポイント全体が、マーシャリングの仕方をシステムに伝えることです)。どうやら、 'IZoneIdentifier'はマーシャリングを許可していません。 –
私は、どのメソッドが提供されているかを知るために、Pythonがインターフェイスを記述するタイプライブラリを必要としていると思います。タイプライブラリに記述されているインターフェイスのセットは、マーシャリング用に登録されたインターフェイスのセットよりも小さくなります。 –
@IgorTandetnik元のC++プログラムが動作します。だから、実際にはPythonの要件に間違っています。残されているのは、正確に何を見つけるかです。 'Pythoncom'は遅いバインディングでうまく動作するので、TypeLibは絶対にありません。 'pywin32'関数は一般に、必要最小限の追加ロジックだけで基本的なPythonラッパーになるように努力しているので、これはかなり不快です。 –