(1)新建一个MFC对话框新项目

(2)对话框中添加WebBrower控件,添加方式:点击菜单栏专用工具->挑选辅助工具项->在弹出来的挑选辅助工具项对话框挑选COM组件->Microsoft Web Browser->明确,添加到对话框中就可以。

 

(3)添加类CWebBrowser2的头文件和完成

鼠标右键点击新项目->添加->类->Visual C -> MFC->ActiveX控件中的MFC类->点击添加按键->从注册表文件来源于添加类,能用的ActiveX控件挑选Microsoft Web Browser<1.0>->插口挑选IWebBrowser2->点击>按键->点击进行按键,就可以将CWebBrowser2.h和CWebBrowser2.cpp添加到新项目中,XXXdlg.h中包括头文件

#include "CWebbrowser2.h",界定自变量CWebBrowser2 m_web;

(4)XXXdlg.cpp的DoDataExchange中添加将控件与自变量动态性关联

DDX_Control(pDX, IDC_EXPLORER1, m_web);

(5)XXXdlg.cpp的复位涵数中添加

VARIANT vt;

COleVariant vaUrl=_T("http://www.baidu.com");

m_web.Navigate2(vaUrl,&vt,&vt,&vt,&vt);

运作程序流程,能够见到全自动载入百度搜索网页页面。

 

(6)XXXdlg.h中添加一下申明,用以当页面加载进行后进一步实际操作网页页面

DECLARE_EVENTSINK_MAP()

void DocumentCompleteExplorer(LPDISPATCH pDisp, VARIANT* URL);

(7)XXXdlg.cpp中添加

BEGIN_EVENTSINK_MAP(CbaiduDlg, CDialogEx)

ON_EVENT(CbaiduDlg, IDC_EXPLORER1, 259, CbaiduDlg::DocumentCompleteExplorer, VTS_DISPATCH VTS_PVARIANT)

END_EVENTSINK_MAP()

(8)完成DocumentCompleteExplorer

剖析百度搜索源代码能够获得文本框的id是kw1,按键的id是su1。因为百度搜索网页页面标识转变,自身留意更换。

[cpp] view plain copy
 
  1. <span style="font-size:18px;">void CbaiduDlg::DocumentCompleteExplorer(LPDISPATCH pDisp, VARIANT* URL)  
  2. {  
  3.     HRESULT   hr;  
  4.     LPUNKNOWN lpUnknown;  
  5.     LPUNKNOWN lpUnknownWB = NULL;  
  6.     LPUNKNOWN lpUnknownDC = NULL;  
  7.     IHTMLElementCollection *objAllElement=NULL;  
  8.     IHTMLDocument2 *objDocument=NULL;  
  9.     CString strUrl,strTemp;  
  10.   
  11.     lpUnknown = m_web.GetControlUnknown();  
  12.     ASSERT(lpUnknown);  
  13.   
  14.     if (lpUnknown)  
  15.     {  
  16.         hr = lpUnknown->QueryInterface(IID_IUnknown,(LPVOID*)&lpUnknownWB);  
  17.         ASSERT(SUCCEEDED(hr));  
  18.         if (FAILED(hr))  
  19.             return;  
  20.   
  21.         hr = pDisp->QueryInterface(IID_IUnknown, (LPVOID*)&lpUnknownDC);  
  22.         ASSERT(SUCCEEDED(hr));  
  23.         if (SUCCEEDED(hr) && lpUnknownWB == lpUnknownDC)  
  24.         {  
  25.             // The document has finished loading.  
  26.             strUrl=m_web.get_LocationURL();  
  27.             if (strUrl.IsEmpty())  
  28.             {  
  29.                 return ;  
  30.             }  
  31.             objDocument=(IHTMLDocument2*)m_web.get_Document();  
  32.             objDocument->get_all(&objAllElement);  
  33.             if (strUrl==_T("http://www.baidu.com/"))  
  34.             {     
  35.                 CComPtr<IDispatch>pDisp;  
  36.                 objAllElement->item(COleVariant(_T("kw1")),COleVariant((long)0),&pDisp);   
  37.                 CComQIPtr<IHTMLElement, &IID_IHTMLElement>pElement;  
  38.                 if(pDisp==NULL)  
  39.                 {  
  40.                     return;  
  41.                 }  
  42.                 else  
  43.                 {  
  44.                     pElement=pDisp;  
  45.                     pElement->put_innerText(_T("检测")); //添充表格  
  46.                 }  
  47.                   
  48.                 VARIANT   name;   
  49.                 CComBSTR   tag;   
  50.                 long     index;   
  51.                 objAllElement-> get_length(&index);   
  52.                 name.vt=VT_I4;  
  53.                 for(long i=0; i <index; i )//解析xml全部原素,根据id特性获得值  
  54.                 {   
  55.                     name.lVal   =   i;  
  56.                     IDispatch   *   pDispatch=NULL;   
  57.                     objAllElement-> item(name,name,&pDispatch);   
  58.                     IHTMLElement*   spElement;   
  59.                     pDispatch-> QueryInterface(IID_IHTMLElement,   (void**)&spElement);   
  60.                     BSTR   tag;   
  61.                     spElement->get_id(&tag);   
  62.                     CString   ss(tag);   
  63.                     if(ss == "su1")   
  64.                         spElement->click();  
  65.                       
  66.                     spElement->Release();  
  67.                 }  
  68.             }  
  69.         }  
  70.     }     
  71.   
  72.     if (lpUnknownWB)  
  73.         lpUnknownWB->Release();  
  74.   
  75.     if (lpUnknownDC)  
  76.         lpUnknownDC->Release();  
  77. }</span>  

运作能够见到百度搜索全自动检索

附:VS2008服务平台网站源码下载