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.目前我自己想到的方法就是利用标题栏来判断.但是觉得这个方法太没有水平了.
想问问同学们,还有其他方法吗?谢谢!!!

解决方案 »

  1.   

    既然操作excel等,那就是通过 它的接口了,而不是通过窗口handle等
      

  2.   

    HWND可以用FindWindow、FindWindowEx来找。
      

  3.   

    回复4楼:
    不好意思.我没说清楚.我事实上不是操作Excel.我操作的是另外一种自动化软件.
    但是这种软件比较少人用.所以为了好举例,我用Excel代替说明.该软件没有Application.Hwnd的函数.
      

  4.   

    findwindows,findwindowsex,enumwindows,试下这些
      

  5.   

    你想得到窗体句柄是吧?用FindWindow好了呀,关接口什么事情啊
      

  6.   

    如果是 IWebBrowser2 可以用这这方法得到
    CComQIPtr<IOleWindow> spWnd;
    HWND hClientWnd = NULL;
    m_spBrowser->QueryInterface(&spWnd);
    if (spWnd)
    {
    spWnd->GetWindow(&hClientWnd);
    }
    hClientWnd 就是我要的窗口
      

  7.   

    支持9楼。如果EXCEL不提共IOleWindow接口,只能查找了。