(1)新建一個MFC對話框項目 (2)對話框中添加WebBrower控制項,添加方法:點擊菜單欄工具->選擇工具箱項->在彈出的選擇工具箱項對話框選擇COM組件->Microsoft Web Browser->確定,添加到對話框中即可。 (3)添加類CWebBrowser2的頭文件和實現 右鍵點擊項目 ...
(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- <span style="font-size:18px;">void CbaiduDlg::DocumentCompleteExplorer(LPDISPATCH pDisp, VARIANT* URL)
- {
- HRESULT hr;
- LPUNKNOWN lpUnknown;
- LPUNKNOWN lpUnknownWB = NULL;
- LPUNKNOWN lpUnknownDC = NULL;
- IHTMLElementCollection *objAllElement=NULL;
- IHTMLDocument2 *objDocument=NULL;
- CString strUrl,strTemp;
- lpUnknown = m_web.GetControlUnknown();
- ASSERT(lpUnknown);
- if (lpUnknown)
- {
- hr = lpUnknown->QueryInterface(IID_IUnknown,(LPVOID*)&lpUnknownWB);
- ASSERT(SUCCEEDED(hr));
- if (FAILED(hr))
- return;
- hr = pDisp->QueryInterface(IID_IUnknown, (LPVOID*)&lpUnknownDC);
- ASSERT(SUCCEEDED(hr));
- if (SUCCEEDED(hr) && lpUnknownWB == lpUnknownDC)
- {
- // The document has finished loading.
- strUrl=m_web.get_LocationURL();
- if (strUrl.IsEmpty())
- {
- return ;
- }
- objDocument=(IHTMLDocument2*)m_web.get_Document();
- objDocument->get_all(&objAllElement);
- if (strUrl==_T("http://www.baidu.com/"))
- {
- CComPtr<IDispatch>pDisp;
- objAllElement->item(COleVariant(_T("kw1")),COleVariant((long)0),&pDisp);
- CComQIPtr<IHTMLElement, &IID_IHTMLElement>pElement;
- if(pDisp==NULL)
- {
- return;
- }
- else
- {
- pElement=pDisp;
- pElement->put_innerText(_T("測試")); //填充表單
- }
- VARIANT name;
- CComBSTR tag;
- long index;
- objAllElement-> get_length(&index);
- name.vt=VT_I4;
- for(long i=0; i <index; i++)//遍歷所有元素,通過id屬性獲取值
- {
- name.lVal = i;
- IDispatch * pDispatch=NULL;
- objAllElement-> item(name,name,&pDispatch);
- IHTMLElement* spElement;
- pDispatch-> QueryInterface(IID_IHTMLElement, (void**)&spElement);
- BSTR tag;
- spElement->get_id(&tag);
- CString ss(tag);
- if(ss == "su1")
- spElement->click();
- spElement->Release();
- }
- }
- }
- }
- if (lpUnknownWB)
- lpUnknownWB->Release();
- if (lpUnknownDC)
- lpUnknownDC->Release();
- }</span>
運行可以看到百度自動搜索