利用WebBrowser控件实现百度自动搜索
(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。由于百度页面标签变化,自己注意替换。
- <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>
 
运行可以看到百度自动搜索
利用WebBrowser控件实现百度自动搜索的更多相关文章
- C/S模式开发中如何利用WebBrowser控件制作导航窗体
		
原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...
 - C#中利用WebBrowser控件,获得HTML源码
		
最近获得网页的几个老程序都不能用了. 我原来用 如下代码获得网页html 源码: <pre name="code" class="csharp"> ...
 - Webbrowser控件史上最强技巧全集
		
原文:Webbrowser控件史上最强技巧全集 Webbrowser控件史上最强技巧全集 VB调用webbrowser技巧集 1.获得浏览器信息: Private Sub Command1_Click ...
 - C# WebBrowser控件 模拟登录 抓取数据
		
参考博客:C#中的WebBrowser控件的使用 参考博客:C#中利用WebBrowser控件,获得HTML源码 一.问题点: 1.模拟登录后,如果带有嵌套的iframe嵌套,不好读取iframe内容 ...
 - C#中WebBrowser控件的使用
		
今天在YouTube上看了一个关于WebBrowser控件用法的小视频,做一下总结. 首先创建一个WinForm程序,拖入一个textbox控件和一个button按钮,然后拖入一个panel控件,如图 ...
 - C# WebBrowser控件模拟登录
		
一.问题点: 1.模拟登录后,如果带有嵌套的iframe嵌套,不好读取iframe内容,可以直接指定iframe抓取网址 2.C# 清除WebBrowser控件的Session和Cookie 参考文档 ...
 - 关于webbrowser控件自动登陆的问题
		
原文:关于webbrowser控件自动登陆的问题 楼主dtb(陈少)2004-03-04 22:16:55 在 VB / 网络编程 提问 请问怎么用webbrowser自动登陆www.jp168.co ...
 - WPF中不规则窗体与WebBrowser控件的兼容问题解决办法
		
原文:WPF中不规则窗体与WebBrowser控件的兼容问题解决办法 引言 这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序. ...
 - C# Winform WebBrowser控件
		
C# WinForm WebBrowser 1.主要用途:使用户可以在窗体中导航网页. 2.注意:WebBrowser 控件会占用大量资源.使用完该控件后一定要调用 Dispose 方法,以便确保及时 ...
 
随机推荐
- c#  用户输入一个字符串,求字符串的长度
			
C# 用户输入一个字符串,求字符串的长度使用字符串的length: class Program { static void Main(string[] args) { Console.WriteLi ...
 - docker : RabbitMQ  ElasticSearch
			
docker 运行RabbitMQ容器 docker run -d -p 5672:5672 -p 15672:15672 --name 命名 CONTAINER ID 放出5672 / 156 ...
 - 支付机构MRC模
			
一.电商RFM模型 RFM模型是一个简单的根据客户的活跃程度和交易金额贡献所做的分类.因为操作简单,所以较为常用. 近度R:R代表客户最近的活跃时间距离数据采集点的时间距离,R越大,表示客户越久未发生 ...
 - Mysql内置功能《三》视图
			
一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...
 - jQuery动态数字翻滚计数到指定数字的文字特效代码
			
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
 - gitlab迁移版本库(保留原版本库的所有内容)
			
如果你想从别的 Git 托管服务那里复制一份源代码到新的 Git 托管服务器上的话,可以通过以下步骤来操作. 1) 从原地址克隆一份裸版本库,比如原本托管于 GitHub git clone --ba ...
 - SQL语句insert into 不存在则插入,存在则修改
			
一 测试表的创建 -- ---------------------------- -- Table structure for User -- ---------------------------- ...
 - [ActionScript 3.0]  与C#通信方法fscommand
			
与C#通信的方法之一 flash.system.fscommand(command:String, args:String=""):void, command 传递给主机应用程序的 ...
 - docker部署生产环境下的tomcat
			
1. dockerfile文件 FROM tomcat:7-jre8 WORKDIR /etc COPY ./Shanghai /etc/localtime WORKDIR /usr/share/zo ...
 - jenkins配置以cygwin环境的子节点
			
1.为Cygwin配置上sshd服务 ⑴.双击点击如下安装文件,并一直选取下一步 ⑵.到这个步骤停止,并且在search栏里输入openssh,并下载搜出的两个程序 ⑶.下载好以后以管理员权限打开cy ...