(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。由于百度页面标签变化,自己注意替换。

  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. lpUnknown = m_web.GetControlUnknown();
  11. ASSERT(lpUnknown);
  12. if (lpUnknown)
  13. {
  14. hr = lpUnknown->QueryInterface(IID_IUnknown,(LPVOID*)&lpUnknownWB);
  15. ASSERT(SUCCEEDED(hr));
  16. if (FAILED(hr))
  17. return;
  18. hr = pDisp->QueryInterface(IID_IUnknown, (LPVOID*)&lpUnknownDC);
  19. ASSERT(SUCCEEDED(hr));
  20. if (SUCCEEDED(hr) && lpUnknownWB == lpUnknownDC)
  21. {
  22. // The document has finished loading.
  23. strUrl=m_web.get_LocationURL();
  24. if (strUrl.IsEmpty())
  25. {
  26. return ;
  27. }
  28. objDocument=(IHTMLDocument2*)m_web.get_Document();
  29. objDocument->get_all(&objAllElement);
  30. if (strUrl==_T("http://www.baidu.com/"))
  31. {
  32. CComPtr<IDispatch>pDisp;
  33. objAllElement->item(COleVariant(_T("kw1")),COleVariant((long)0),&pDisp);
  34. CComQIPtr<IHTMLElement, &IID_IHTMLElement>pElement;
  35. if(pDisp==NULL)
  36. {
  37. return;
  38. }
  39. else
  40. {
  41. pElement=pDisp;
  42. pElement->put_innerText(_T("测试")); //填充表单
  43. }
  44. VARIANT   name;
  45. CComBSTR   tag;
  46. long     index;
  47. objAllElement-> get_length(&index);
  48. name.vt=VT_I4;
  49. for(long i=0; i <index; i++)//遍历所有元素,通过id属性获取值
  50. {
  51. name.lVal   =   i;
  52. IDispatch   *   pDispatch=NULL;
  53. objAllElement-> item(name,name,&pDispatch);
  54. IHTMLElement*   spElement;
  55. pDispatch-> QueryInterface(IID_IHTMLElement,   (void**)&spElement);
  56. BSTR   tag;
  57. spElement->get_id(&tag);
  58. CString   ss(tag);
  59. if(ss == "su1")
  60. spElement->click();
  61. spElement->Release();
  62. }
  63. }
  64. }
  65. }
  66. if (lpUnknownWB)
  67. lpUnknownWB->Release();
  68. if (lpUnknownDC)
  69. lpUnknownDC->Release();
  70. }</span>

运行可以看到百度自动搜索

附:VS2008平台源码下载

利用WebBrowser控件实现百度自动搜索的更多相关文章

  1. C/S模式开发中如何利用WebBrowser控件制作导航窗体

    原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...

  2. C#中利用WebBrowser控件,获得HTML源码

    最近获得网页的几个老程序都不能用了. 我原来用 如下代码获得网页html 源码: <pre name="code" class="csharp"> ...

  3. Webbrowser控件史上最强技巧全集

    原文:Webbrowser控件史上最强技巧全集 Webbrowser控件史上最强技巧全集 VB调用webbrowser技巧集 1.获得浏览器信息: Private Sub Command1_Click ...

  4. C# WebBrowser控件 模拟登录 抓取数据

    参考博客:C#中的WebBrowser控件的使用 参考博客:C#中利用WebBrowser控件,获得HTML源码 一.问题点: 1.模拟登录后,如果带有嵌套的iframe嵌套,不好读取iframe内容 ...

  5. C#中WebBrowser控件的使用

    今天在YouTube上看了一个关于WebBrowser控件用法的小视频,做一下总结. 首先创建一个WinForm程序,拖入一个textbox控件和一个button按钮,然后拖入一个panel控件,如图 ...

  6. C# WebBrowser控件模拟登录

    一.问题点: 1.模拟登录后,如果带有嵌套的iframe嵌套,不好读取iframe内容,可以直接指定iframe抓取网址 2.C# 清除WebBrowser控件的Session和Cookie 参考文档 ...

  7. 关于webbrowser控件自动登陆的问题

    原文:关于webbrowser控件自动登陆的问题 楼主dtb(陈少)2004-03-04 22:16:55 在 VB / 网络编程 提问 请问怎么用webbrowser自动登陆www.jp168.co ...

  8. WPF中不规则窗体与WebBrowser控件的兼容问题解决办法

    原文:WPF中不规则窗体与WebBrowser控件的兼容问题解决办法 引言 这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序. ...

  9. C# Winform WebBrowser控件

    C# WinForm WebBrowser 1.主要用途:使用户可以在窗体中导航网页. 2.注意:WebBrowser 控件会占用大量资源.使用完该控件后一定要调用 Dispose 方法,以便确保及时 ...

随机推荐

  1. SpringBoot入门(三)——入口类解析

    本文来自网易云社区 上一篇介绍了起步依赖,这篇我们先来看下SpringBoot项目是如何启动的. 入口类 再次观察工程的Maven配置文件,可以看到工程的默认打包方式是jar格式的. <pack ...

  2. docker安装与基本配置

    Docker有很多种安装的选择,我们推荐您在Ubuntu下面安装,因为docker是在Ubuntu下面开发的,安装包测试比较充分,可以保证软件包的可用性.Mac, windows和其他的一些linux ...

  3. Camel Games借助AWS在爆发式增长中提供优质游戏体验

    关于Camel Games Camel Games 成立于2009年,是中国首家得到google市场官方认证的顶尖开发公司.长期以来,Camel Games始终依靠于率先的技术背景,致力于成为国际一流 ...

  4. “全栈2019”Java第八十一章:外部类能否访问嵌套接口里的成员?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. TensorFlow支持GPU配置问题

    目录 Tensorflow-GPU 环境条件 现有硬件 现有软件 硬件要求 软件要求 步骤 0.Visual studio 1.下载安装显卡驱动 2.下载对应版本 CUDA 3.安装配置 cuDNN ...

  6. 现代 JavaScript 框架存在的主要原因

    简评:现代 JavaScript 框架的出现最主要是解决哪个问题?这篇文章很好的解释了这个问题. 我见过许多人盲目地使用像 React,Angular 或 Vue.js 这样的现代框架.这些框架提供了 ...

  7. java学习笔记_多态

    多态:父类的变量可以引用子类的对象 引用: Student s1 = stu; s1.setScore(200); 1.一个对象可以有多个引用,可以有多个变量操作同一个对象   2.当一个对象没有任何 ...

  8. 51nod2004 终结之时 (支配树+树剖+树链的并)

    link 我永远喜欢洛天依 给定一张图世末积雨云,你需要维护其支配树: 单点修改,子树修改,树链修改 子树求和,树链求和,多条树链的并集求和 撤销之前的操作 可以先用 Lengauer-Tarjan ...

  9. 利用Python实现倒序任意整数

    这是很早以前学习C时候做过的一个练习题,题目的要求大概是把用户输入的三位数倒序输出,比如说用户输入123,然后程序应该输出的结果是321.如果遇到用户输入100,那么程序应该输出1.然后我给扩展一下, ...

  10. Javascript 定时器的使用陷阱 (setInterval)

    setTimeout(function(){ // 其他代码 setTimeout(arguments.callee, interval); }, interval); setInterval会产生回 ...