我现在只能得到IE中的,对于腾讯浏览器得不到,请高人指点,谢谢!

解决方案 »

  1.   

    FindWindowEx 找窗口的方法也不行?
      

  2.   

    顶!顺便学习一下:你得到IE中输入的网址的方法是什么?GetWindowText??
      

  3.   

    腾讯浏览器不能用IWebbrowser2接口,需要先找到窗口,
    //通过一系列的FindWindowEx找到地址栏的编辑框句柄,窗口的类名可通过WINSIGHT32找到 
    handle=FindWindowEx(handle,0,"IEFrame",NULL); 
    handle=FindWindowEx(handle,0,"WorkerA",NULL); 
    handle=FindWindowEx(handle,0,"ReBarWindow32",NULL); 
    handle=FindWindowEx(handle,0,"ComboBoxEx32",NULL); 
    handle=FindWindowEx(handle,0,"ComboBox",NULL); 
    handle=FindWindowEx(handle,0,"Edit",NULL); 
    //取得URL的长度 
    int i=SendMessage(handle,WM_GETTEXTLENGTH,0,0); 
    char *tem=new char[i]; 
    //取回URL并显示 
    SendMessage(handle,WM_GETTEXT,i+1,long(tem)); 
    如果仍然找不到,用spy++对比一下改
      

  4.   

    腾讯的主窗口类名不是IEFRAME,没有子窗口的类名是workerA of workerW
      

  5.   

    是workerA or workerW,请问有什么办法判断是浏览器窗口吗?
      

  6.   

    bool FindAllWebBrowser()
    {
    //释放上次调用该函数时,生成的com对象
    if (vectPWebBrowser.size() != 0)
    {
    for (int i = 0; i < vectPWebBrowser.size(); i++)
    {
    vectPWebBrowser[i]->Release();
    } vectPWebBrowser.clear();
    } HRESULT hr;
    SHDocVw::IShellWindowsPtr spSHWinds; 
    hr = spSHWinds.CreateInstance (__uuidof(SHDocVw::ShellWindows)); 

    if (FAILED (hr))
    {
    return false;
    } if(spSHWinds == NULL)
    return false;

    //获得系统中的窗口数目
    long nCount = spSHWinds->GetCount (); IDispatchPtr spDisp;

    for (long i = 0; i < nCount; i++)
    {
    _variant_t va (i, VT_I4);
    spDisp = spSHWinds->Item (va);

    IWebBrowser2 * pWebBrowser = NULL;
    hr = spDisp.QueryInterface (IID_IWebBrowser2, & pWebBrowser);

    if (pWebBrowser != NULL)
    {
    HRESULT hr;
    IDispatch* pHtmlDocDispatch = NULL;
    IHTMLDocument2 * pHtmlDoc = NULL;

    //接收document object.
    hr = pWebBrowser->get_Document (&pHtmlDocDispatch);

    if (SUCCEEDED (hr) && (pHtmlDocDispatch != NULL))
    {
    // Query for IPersistStreamInit.
    hr = pHtmlDocDispatch->QueryInterface (IID_IHTMLDocument2,  (void**)&pHtmlDoc);
    if (SUCCEEDED (hr) && (pHtmlDoc != NULL))
    {
    vectPWebBrowser.push_back(pWebBrowser);  //将该页面添加到页表中
    pHtmlDoc->Release();        //寻找到doc成功,必须要释放
    }
    pHtmlDocDispatch->Release ();
    }
    }
    }

    return TRUE;
    }这个是最标准的方法, 可以找到所有的当前IE的实例, 不过你得先把msdn里IWebBrowser2的使用说明看一下.
      

  7.   

    HWND hIE=::FindWindow("IEFRAME",0); //获得第一个IE窗口
        HWND hbegin=hIE; //记录下来
        bool bnext=false;
        while(hIE)
       {
          TCHAR bb[200];
          //获取标题
          ::SendMessage(hIE,WM_GETTEXT,200,(LPARAM)bb); 
          CString ss(bb);
          //注意:explorer也是使用的IE窗口,也含有地址栏,判断是不是正在浏览网页的真正IE窗口
          if(ss.Find("Microsoft Internet Explorer")>0)  
          //一般情况下这样判断是可以的,除非你的IE被别人恶意修改了,呵呵 
          {
      bool bfind=false;
     
      HWND hSub=::FindWindowEx(hIE,0,_T("WorkerW"),0);//查找子窗口
      while(hSub && !bfind)
      {
          HWND hss=::FindWindowEx(hSub,0,_T("ReBarWindow32"),0);
          while(hss && !bfind)
         {
      //找到包含地址栏的窗口,取地址
      HWND hs3=::FindWindowEx(hss,0,"ComboBoxEx32",0);
     
      if(hs3)
      {
      bfind=true;
      ::SendMessage(hs3,WM_GETTEXT,200,(LPARAM)bb);
      //::GetWindowText(hs3,bb,200);
      AfxMessageBox(bb);
      break;
      }
         }
      hSub=::FindWindowEx(hIE,hSub,_T("RebarWindow32"),0);
      }
          }
          hIE=::GetNextWindow(hIE,GW_HWNDNEXT);//按照z-序向下找
          //如果已经到最下边了,从hbegin开始向上找
          if(!hIE && !bnext)
          {
      bnext=true;
      hIE=::GetNextWindow(hbegin,GW_HWNDPREV);
           }
        }