[Python] win32com.client.Dispatch() でもってこれないオブジェクトを呼ぶ
おもむろに comtypes を取り出す
from comtypes.client import CreateObject
CLSID を調べる
from comtypes import * CLSID_Sti = GUID('{B323F8E0-2E68-11D0-90EA-00AA0060F86C}')
Interface を作成する
*.idl がある
midl で *.tlb に変換する
*.tlb がある
try: import comtypes.gen.hoge except ImportError: from comtypes.client import GetModule GetModule('*.tlb へのパスとか *.exe;*.dll へのパスとか') from comtypes.gen.hoge import *
*.h がある
頑張って自力で書く。こんな感じで↓
from ctypes import * from ctypes.wintypes import * from comtypes import * class IStillImage(IUnknown): _case_insensitive_ = True _iid_ = GUID('{641BD880-2DC8-11D0-90EA-00AA0060F86C}') _idlflags_ = [] IStillImage._methods_ = [ COMMETHOD([], HRESULT, 'Initialize', ( ['in'], HINSTANCE, 'hinst' ), ( ['in'], DWORD, 'dwVersion' ), ), COMMETHOD([], HRESULT, 'GetDeviceList', ( ['in'], DWORD, 'dwType' ), ( ['in'], DWORD, 'dwFlags' ), ( ['out'], POINTER(DWORD), 'pdwItemsReturned' ), ( ['out'], POINTER(LPVOID), 'ppBuffer' ), ), ... ]
ドキュメントしかない。何もない
諦める。要するに関数ポインタの構造体なんで、順序がわからないと呼べない。多分。
準備完了
後は好きにする。
obj = CreateObject(CLSID_Sti, interface=IStillImage) obj.RegisterLaunchApplication('AppName', 'command line')
IStillImage と INetCfg で成功した手法。