描述:
假如该ActiveX控件是有窗口的,例如网页中的flash,媒体播放器控件,都已经得到了控件的IDispatch,却没办法得到窗口句柄:
DISPPARAMS DispParams;
VARIANT varResult;
EXCEPINFO ExcepInfo;
UINT uArgErr;
VariantClear(&varResult);
memset(&DispParams, 0, sizeof(DISPPARAMS));
memset(&ExcepInfo, 0, sizeof(EXCEPINFO));
hr = ppdisp->Invoke(DISPID_HWND, IID_NULL,LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET,&DispParams, &varResult, &ExcepInfo, &uArgErr);
hr返回错误提示:0x80020003 找不到该成员。为什么?DISPID_HWND可是ActiveX标准属性啊!!!
解决方案1:
只有在你自己的代码里面创建的控件才适用这个方法。
解决方案2:mark
解决方案3: 知道窗口句柄就可以得到它的IDispatch接口!
hwnd.QueryControl(...)
http://blog.csdn.net/jiangsheng/archive/2002/08/19/3788.aspx
解决方案5: DISPID_HWND是标准?我写控件从来不用这个ID
一般来说你需要查询控件的IOleWindow等接口进行窗口访问