google了很久也没看到,只看到一个从HWND到接口的范例,没找到从接口到HWND的资料.
是这样的.用GetActiveObject得到一个Excle的接口.
HRESULT hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);
if(SUCCEEDED(hr))
hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pDisp);
那么如何从pUnk或者pDisp获得该EXCEL的HWND.目前我自己想到的方法就是利用标题栏来判断.但是觉得这个方法太没有水平了.
想问问同学们,还有其他方法吗?谢谢!!!
是这样的.用GetActiveObject得到一个Excle的接口.
HRESULT hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);
if(SUCCEEDED(hr))
hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pDisp);
那么如何从pUnk或者pDisp获得该EXCEL的HWND.目前我自己想到的方法就是利用标题栏来判断.但是觉得这个方法太没有水平了.
想问问同学们,还有其他方法吗?谢谢!!!
不好意思.我没说清楚.我事实上不是操作Excel.我操作的是另外一种自动化软件.
但是这种软件比较少人用.所以为了好举例,我用Excel代替说明.该软件没有Application.Hwnd的函数.
CComQIPtr<IOleWindow> spWnd;
HWND hClientWnd = NULL;
m_spBrowser->QueryInterface(&spWnd);
if (spWnd)
{
spWnd->GetWindow(&hClientWnd);
}
hClientWnd 就是我要的窗口