/*============================说明部分=================================
实现一下函数需包含头文件
#include <Wininet.h>
#include <Shlwapi.h>
Linker : Wininet.lib Shlwapi.lib
=================================================================*/
/*========================================END========================================*/ /*============================说明部分=================================
清除指定网页Cookie,注意传参,如:www.baidu.com 要写为:baidu.com
=================================================================*/
BOOL CleanUrlCache(LPCTSTR lpUrl)
{
LPINTERNET_CACHE_ENTRY_INFO lpICEI = NULL;
DWORD dwSize = ;
HANDLE hFind = FindFirstUrlCacheEntry(NULL, NULL, &dwSize);
if (hFind == NULL && GetLastError() != ERROR_INSUFFICIENT_BUFFER)
return FALSE; lpICEI = (LPINTERNET_CACHE_ENTRY_INFO)new char[dwSize];
hFind = FindFirstUrlCacheEntry(NULL, lpICEI, &dwSize);
if (hFind == NULL)
{
delete lpICEI;
return FALSE;
} do
{
if (StrStrI(lpICEI->lpszSourceUrlName, lpUrl))
{
int bRet = DeleteUrlCacheEntry(lpICEI->lpszSourceUrlName);
}
delete lpICEI;
lpICEI = NULL;
dwSize = ; if (!FindNextUrlCacheEntry(hFind, NULL, &dwSize) && GetLastError() != ERROR_INSUFFICIENT_BUFFER)
break;
lpICEI = (LPINTERNET_CACHE_ENTRY_INFO)new char[dwSize];
} while (FindNextUrlCacheEntry(hFind, lpICEI, &dwSize)); if (lpICEI != NULL)
delete lpICEI;
return TRUE;
}
/*========================================END========================================*/ /*============================说明部分=================================
清除IE所有Cookie
#include <Wininet.h>
Linker : Wininet.lib
=================================================================*/
void ClearInternetCache()
{
DWORD dwNeeded = ;
FindFirstUrlCacheEntry(NULL, NULL, &dwNeeded); if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
unsigned char *buffer = new unsigned char[dwNeeded];
try
{
LPINTERNET_CACHE_ENTRY_INFO lpicei =
reinterpret_cast<LPINTERNET_CACHE_ENTRY_INFO>(buffer);
HANDLE HFind = FindFirstUrlCacheEntry(NULL, lpicei, &dwNeeded);
DeleteUrlCacheEntry(lpicei->lpszSourceUrlName); bool no_more_files = false;
while (!no_more_files)
{
if (FindNextUrlCacheEntry(HFind, lpicei, &dwNeeded))
{
DeleteUrlCacheEntry(lpicei->lpszSourceUrlName);
}
else switch (GetLastError())
{
case ERROR_INSUFFICIENT_BUFFER:
{
delete [] buffer;
buffer = new unsigned char[dwNeeded];
lpicei = reinterpret_cast<LPINTERNET_CACHE_ENTRY_INFO>(buffer);
break;
}
default:
{
no_more_files = true;
break;
}
}
}
FindCloseUrlCache(HFind);
}
catch (...)
{
delete [] buffer;
}
delete [] buffer;
}
} /*========================================END========================================*/ /*============================说明部分=================================
CString 转换为 VARIANT 类型
=================================================================*/
StringToVariant(CString str)
{
VARIANT variant;
VariantInit(&variant);
variant.vt=VT_BSTR;
variant.bstrVal=str.AllocSysString(); return variant;
}
/*========================================END========================================*/ /*============================说明部分=================================
打开指定URL,其中m_webBrowser 是web browser
控件关联的控件类型的变量
=================================================================*/
OpenURL(LPCTSTR strURL)
{
VARIANT vInfo;
VariantInit(&vInfo);
CString strHeaders=_T("Content-Type:application/x-WWW-form-urlencoded");
VARIANT vHeaders=StringToVariant(strHeaders);
m_webBrowser.Navigate(strURL,&vInfo,&vInfo,&vInfo,&vHeaders);
}
/*========================================END========================================*/ /*============================说明部分=================================
向指定ID的HTML标记中输入文字
strID为标记的ID值
#include <mshtml.h>
#include <atlbase.h>
=================================================================*/
InputText(CString strID, CComVariant strText)
{
HRESULT hr; IDispatch *pDisp;
pDisp=m_webBrowser.get_Document(); //得到webBrowser控件接口 IHTMLDocument2* pDoc;
hr=pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc); //得到网页文档接口 IHTMLElementCollection* pColl=NULL;
hr=pDoc->get_all(&pColl);//得到所有网页元素记录集合 IDispatch *pDisp2;
VARIANT index;//用于接收返回元素基于的索引,一般不用,设为0就好,而是用IDispatch 接收元素对象接口
//V_VT(&index)=VT_I4;
//V_I4(&index)=0;
index.vt=VT_I4;
index.lVal=; VARIANT varID;//要查找的HTML标记ID
varID=StringToVariant(strID); hr=pColl->item(varID,index,&pDisp2); //找到元素的位置
if(S_OK==hr&&NULL!=pDisp2)
{
IHTMLElement* pElem=NULL;
hr=pDisp2->QueryInterface(IID_IHTMLElement,(void**)&pElem); if(S_OK==hr&&NULL!=pElem)
{
pElem->put_innerText(strText.bstrVal);
pElem->Release();
}
pDisp2->Release();
pDisp->Release();
}
}
/*========================================END========================================*/
/*============================说明部分=================================
点击指定ID值的HTML按钮
strID是按钮的ID值
#include <mshtml.h>
#include <atlbase.h>
=================================================================*/
ClickBtn(CString strID)
{
HRESULT hr;
IDispatch* pDisp;
pDisp=m_webBrowser.get_Document();//①得到网页控件接口 IHTMLDocument2* pDoc;
hr=pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);//②得到网页文档接口 IHTMLElementCollection* pColl=NULL;
hr=pDoc->get_all(&pColl);//③得到网页元素记录集合接口 IDispatch* pDisp2;
VARIANT index;
//V_VT(&index)=VT_I4;
//V_I4(&index)=0;
index.vt=VT_I4;
index.lVal=; VARIANT varID;
varID=StringToVariant(strID); hr=pColl->item(varID,index,&pDisp2);//④得到指定HTML标记接口 if(S_OK==hr&&NULL!=pDisp2)
{
IHTMLElement* pElem=NULL;
hr=pDisp2->QueryInterface(IID_IHTMLElement,(void**)&pElem);//⑤得到确定元素接口 if(S_OK==hr&&NULL!=pElem)
{
pElem->click();
pElem->Release();
}
pDisp2->Release();
pDisp->Release();
}
}
/*========================================END========================================*/
/*===============================================================
根据页面Class属性值点击页面元素
=================================================================*/
void CPiLiangQianDaoDlg::ClickByClassName()
{
IHTMLElementCollection *objAllElement=NULL;
IHTMLDocument2 *objDocument=NULL; objDocument=(IHTMLDocument2 *)m_webBrowser.get_Document();
//由控件得到IHTMLDocument2接口指针 objDocument-> get_all(&objAllElement); //得到网页所有元素的集合 IHTMLElement * pElem = NULL;
VARIANT name;
CComBSTR tag;
long a;
objAllElement-> get_length(&a);
name.vt=VT_I4;
for(int i=;i <a;i++)//遍历所有元素
{
name.lVal = i;
IDispatch * pDispatch=NULL;
objAllElement-> item(name,name,&pDispatch);
IHTMLElement* spElement;
pDispatch-> QueryInterface(IID_IHTMLElement, (void**)&spElement);
BSTR tag;
spElement->get_className(&tag);
CString ss(tag);
if(ss == "j_signbtn sign_btn2 j_cansign sign0" || ss == "j_signbtn sign_btn2 j_cansign sign1" || ss == "j_signbtn sign_btn2 j_cansign sign6")
spElement-> click();
}
/*=====================================================================================*/
/*=====================================================================================
根据网页打开的进程设置进度条
给web browser添加OnProgressChange响应函数
m_procCtrl是进度条关联的控件变量
=======================================================================*/
if(ProgressMax>)
m_procCtrl.SetPos(*Progress / ProgressMax);
//======================================== /*====================================================================
搜索点击页面文字连接
Str为文字
=======================================================================*/
ClickItem(CString str)
{
IHTMLElementCollection *objAllElement=NULL;
IHTMLDocument2 *objDocument=NULL; objDocument=(IHTMLDocument2 *)m_webBrowser.get_Document();
//由控件得到IHTMLDocument2接口指针 objDocument-> get_all(&objAllElement); //得到网页所有元素的集合 IHTMLElement * pElem = NULL;
VARIANT name;
CComBSTR tag;
long a;
objAllElement-> get_length(&a);
name.vt=VT_I4;
for(int i=;i <a;i++)//遍历所有元素
{
name.lVal = i;
IDispatch * pDispatch=NULL;
objAllElement-> item(name,name,&pDispatch);
IHTMLElement* spElement;
pDispatch-> QueryInterface(IID_IHTMLElement, (void**)&spElement);
BSTR tag;
spElement-> get_outerText(&tag);
CString ss(tag);
if(ss=="地图")
spElement-> click();
}
}
/*=====================================================================================*/
/*=======================================================================================
在DocumentCompleteExplorer判断是否为主框架加载完毕
在页面中有多个框架时会多次触发,可能导致页面中后面的“首页”链接得不到,可以在void CTest2Dlg::OnDownloadCompleteExplorer1(LPDISPATCH pDisp, VARIANT FAR* URL)
加入下面代码:
======================================================================================*/CComQIPtr <IWebBrowser2, &IID_IWebBrowser2> pWeb; CComQIPtr <IHTMLDocument2,&IID_IHTMLDocument2> pDoc2; pWeb = pDisp; pWeb-> get_Document((IDispatch**)&pDoc2); if (m_ie.GetDocument() != pDoc2) return;
/*==========================================================================*/ /*======================================================================
判断网页是否加载完毕
========================================================================*/
void CPiLiangQianDaoDlg::DocumentCompleteExplorer(LPDISPATCH pDisp, VARIANT* URL)
{
// TODO: 在此处添加消息处理程序代码
if(m_webBrowser.get_ReadyState() == READYSTATE_COMPLETE && times == )
{
((CListBox *)GetDlgItem(IDC_LIST_STATE))->AddString(_T("加载完毕!"));
m_IsInitDone = ;
times++;
}
}
/*======================================================================================
截取网页部分内容,并画图显示
======================================================================================*/
{
CClientDC hImageDC(GetDlgItem(IDC_EDIT_INFO)); HRESULT hr; IDispatch *pDisp;
pDisp=m_webBrowser.get_Document(); //得到webBrowser控件接口 IHTMLDocument2* pDoc;
hr=pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc); //得到网页文档接口 IHTMLElementCollection* pColl=NULL;
hr=pDoc->get_all(&pColl);//得到所有网页元素记录集合 IDispatch *pDisp2;
VARIANT index;//用于接收返回元素基于的索引,一般不用,设为就好,而是用IDispatch 接收元素对象接口
//V_VT(&index)=VT_I4;
//V_I4(&index)=0;
index.vt=VT_I4;
index.lVal=; VARIANT varID;//要查找的HTML标记ID
varID=StringToVariant(_T("userlike_info_head_img")); hr=pColl->item(varID,index,&pDisp2); //找到元素的位置
if(S_OK==hr&&NULL!=pDisp2)
{
IHTMLElement3* pElem=NULL;
hr=pDisp2->QueryInterface(IID_IHTMLElement3,(void**)&pElem);
IHTMLElementRender *pRender = NULL;
pElem ->QueryInterface(IID_IHTMLElementRender, (void **) &pRender);
pRender->DrawToDC(hImageDC);
}
}
/*=================================================================================*/ /*=================================================================================
判断网页是否加在完全(包含框架)
原理:如果直接早DocummentComple里判断的话,包含多个框架(frame)的网页就会多次激发该函数。所以这里我们这里通过pDish判断是不是主框架的的借口(最后调用该函数),如果是的话就是最后一次激发,表示主框架家在完毕,也就是整个网页加载完毕!
=====================================================================================*/
void CTieBaGuajiDlg::DocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL)
{
// TODO: 在此处添加消息处理程序代码
CComQIPtr <IWebBrowser2, &IID_IWebBrowser2> pWeb;
CComQIPtr <IHTMLDocument2,&IID_IHTMLDocument2> pDoc2;
pWeb = pDisp;
pWeb-> get_Document((IDispatch**)&pDoc2);
if (m_webBrowser.get_Document() == pDoc2)
{
((CListBox*)GetDlgItem(IDC_LIST_STATE))->AddString(_T("初始化完成!"));
}
/////////////////////////////////////////
/*if(0==m_count)
{
((CListBox*)GetDlgItem(IDC_LIST_STATE))->AddString(_T("初始化完成!"));
m_count++;
}*/
}
/*=============================================================================*/
/*==============================================================================
另外如果不想让webbrowser空间弹出错误提示可以,在对空间资源编辑时设置Slient为TRUE
==============================================================================*/

webBrowser 应用编程函数总结的更多相关文章

  1. 翻译连载 | 附录 C:函数式编程函数库-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

  2. C++模板元编程 - 函数重载决议选择工具(不知道起什么好名)完成

    这个还是基于之前实现的那个MultiState,为了实现三种类型“大类”的函数重载决议:所有整数.所有浮点数.字符串,分别将这三种“大类”的数据分配到对应的Converter上. 为此实现了一些方便的 ...

  3. mysql编程---函数

    (存储)函数: 函数,也说成"存储函数",其实就是js或php中所说的函数! 唯一的区别: 这里的函数必须返回一个数据(值): 定义形式: 注意事项: 1, 在函数内容,可以有各种 ...

  4. [国嵌攻略][070-095][Linux编程函数手册]

    第1类 时间编程类 1.1 获取日历时间 1.1.1 函数名 time 1.1.2 函数原形 time_t time(time_t *t) 1.1.3 函数功能 返回日历时间 1.1.4 所属头文件 ...

  5. 函数式编程 - 函数缓存Memoization

    函数式编程风格中有一个"纯函数"的概念,纯函数是一种无副作用的函数,除此之外纯函数还有一个显著的特点:对于同样的输入参数,总是返回同样的结果.在平时的开发过程中,我们也应该尽量把无 ...

  6. [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念

      本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程?   java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的 ...

  7. Python编程-函数进阶二

    一.生成器补充 1.什么是生成器? 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象. 2.生成器分类 (1) ...

  8. Linux Shell脚本编程-函数

    函数介绍  定义:把一段独立功能的的代码当做一个整体,并为之一个名字,命名的代码段,此即为函数:  功能:函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程.  注意: ...

  9. 函数式编程—函数的关系—is-a、has-a、use-a

    is-a:函数的实现与函数类型的关系: has-a:匿名(闭包)函数的创建者与匿名函数的关系:匿名函数与环境和上下文(函数)的关系: use-a:高阶函数与参量函数的关系: 函数式编程的基本功之一就是 ...

随机推荐

  1. Intellij idea配置scala开发环境

    1.Intellij idea配置scala开发环境 解决Plugin Scala was not installed: No route to host Plugin Scala was not i ...

  2. php *-devel

    源码编译安装个php,缺少好多-devel的库. why devel? devel包至少包括头文件和链接库.如果你的要安装的源码依赖某个库,那肯定需要这两样东西. 让apache支持php 在编译ph ...

  3. Regular Expression 正则表达式

    1. "^"表示以什么字符开始,"$"表示以什么字符结束: 2. \w表示字符类,包括大小写字母和数字: 3. “+”表示一个或多个,"*" ...

  4. sqlServer拼结列字符串

    with table1(sessionID,message,createTime)as(select 1 ,'hello' ,'2014/5/6' union allselect 1 ,'word' ...

  5. ArcGIS Enterprise 10.5.1 静默安装部署记录(Centos 7.2 minimal)- 1、安装前准备

    安装前准备 上传文件到服务器,x-ftp   xshell登陆Centos 检查机器名 修改机器名为:portal.cloud.local   方法一:零时设置,重启后失效,该方法不可取     方法 ...

  6. Linux --防火墙(一)

    基本组成 表: filter:用来对数据包进行过滤,根据具体的规则要求决定如何处理一个数据包.表内包含三个链,即INOUT.FORWARD.OUTPUT nat表:主要用来修改数据包的IP地址.端口号 ...

  7. FFT算法实现——基于GPU的基2快速傅里叶变换

    最近做一个东西,要用到快速傅里叶变换,抱着蛋疼的心态,自己尝试写了一下,遇到一些问题. 首先看一下什么叫做快速傅里叶变换(FFT)(来自Wiki): 快速傅里叶变换(英语:Fast Fourier T ...

  8. vue 单页应用中微信支付的坑

    vue 单页应用中微信支付的坑 标签(空格分隔): 微信 支付 坑 vue 场景 在微信H5页面(使用 vue-router2 控制路由的 vue2 单页应用项目)中使用微信 jssdk 进行微信支付 ...

  9. Jmeter入门18 Jmeter添加cookie的两种方式

    jmeter中添加cookie可以通过配置HTTP Cookie Manager,也可以通过HTTP Header Manager,因为cookie是放在头文件里发送的. 实例:博客园点击添加新随笔  ...

  10. HDU 6103

    题意: 求最长的两个不相交的子序列,dis <= m : 分析: 当时二分了答案,暴力匹配,TLE了,然后考虑了,O(n^2)预处理出所有区间 dis,然后答案是所有dis中>=m的最长长 ...