外部から制御するアプリケーションに付属する 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.'
私の質問は2つの部分に分かれています:
1) COM ブラウザーと上記の呼び出しの両方でオブジェクトを見つけることができるのに、win32com.client.Dispatch を使用してオブジェクトを呼び出すことができないのはどうしてですか? [注: 問題のアプリケーションは実行中です。]
2) 間違った関数を使用していませんか? ディスパッチは間違っていますか?Python COM モジュールのドキュメントがわかりにくいと感じたことは率直に認めますが、既存の COM オブジェクトが Dispatched されていない例を見つけられなかったので、ここからどこに行くべきかわかりません。さらに、ディスパッチできる4つのオブジェクトは、ドキュメントで説明されているとおりに機能するようです。
[最後の注意: pythoncom.CoCreateInstance(TypeLibCLSID, None, 1, GUIDofInterfaceObject) を試行すると、「Interface not supported.」が表示されます。使用する必要がある重要なインターフェイスは、ここで試している GUID です。]