在客户端中使用webbrower控件,控件中已显示网页,对应的图片资源应已下载完,下面从缓存中找到图片资源,两种方法都可

1、GetUrlCacheEntryInfo

http://msdn.microsoft.com/en-us/library/aa384185(v=vs.85).aspx

2、FindFirstUrlCacheEntry、FindNextUrlCacheEntry、FindCloseUrlCache

http://msdn.microsoft.com/zh-SG/library/aa384026

void CTesthaijiaDlg::OnDocumentComplete(LPDISPATCH pDisp, LPCTSTR szUrl)
{
if (pDisp == m_pBrowserApp)
{
CString sCheckUrl(szUrl);
if (sCheckUrl.CompareNoCase(sLoginUrl) == )
{
if (m_spHtmlDoc)
{
CDispatch disp = m_spHtmlDoc;
disp.InvokePtr(L"getElementById", L"txtUserName").Put(L"value", L"abc");
disp.InvokePtr(L"getElementById", L"txtPassword").Put(L"value", L"abc"); CDispatch dispImg = disp.InvokePtr(L"getElementById", L"ValidIMG");
CString s = dispImg.Get(L"src");
if ()
{
LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry = NULL;
DWORD dwEntrySize = ;
lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO) new char[dwEntrySize];
lpCacheEntry->dwStructSize = dwEntrySize;
BOOL b = GetUrlCacheEntryInfo(s, lpCacheEntry, &dwEntrySize);
CString sPath = lpCacheEntry->lpszLocalFileName; RECT rc1;
SystemParametersInfo(SPI_GETWORKAREA,,(PVOID)&rc1,);
SetWindowPos(NULL, , rc1.bottom - , , , SWP_NOSIZE); CDlgCode dlg;
dlg.SetPath(sPath);
if (dlg.DoModal() == IDOK)
{
disp.InvokePtr(L"getElementById", L"txtIMGCode").Put(L"value", CComVariant(dlg.m_sCode));
disp.InvokePtr(L"getElementById", L"BtnLogin").Invoke(L"click");
SetWindowPos(NULL, , , , , SWP_NOSIZE);
}
}
if ()
{
LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry = NULL;
HANDLE hCacheDir = NULL;
DWORD dwTrySize, dwEntrySize = ;
DWORD dwError = ERROR_INSUFFICIENT_BUFFER;
BOOL bSuccess, bDone = FALSE; //是否已经处理完,初始设为false
while(!bDone){
switch(dwError){
case ERROR_INSUFFICIENT_BUFFER:
if(lpCacheEntry)
{
delete [] lpCacheEntry;
}
lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO) new char[dwEntrySize];
lpCacheEntry->dwStructSize = dwEntrySize;
dwTrySize = dwEntrySize;
if(!hCacheDir)
{//为空,说明第一次执行,需要找第一个
hCacheDir = FindFirstUrlCacheEntry(NULL,lpCacheEntry,&dwTrySize);
bSuccess = (hCacheDir != NULL);
}
else
{
bSuccess = FindNextUrlCacheEntry(hCacheDir,lpCacheEntry,&dwTrySize);
}
if(!bSuccess){
dwError = GetLastError();
dwEntrySize = dwTrySize; //使用得到的新长度
}
else
{
dwError = ERROR_SUCCESS;
}
break;
//we are done
case ERROR_NO_MORE_ITEMS:
bDone = TRUE;
break;
//we have got an entry
case ERROR_SUCCESS:
if(bSuccess && (NORMAL_CACHE_ENTRY & lpCacheEntry->CacheEntryType))
{ //
CString sUrl1 = lpCacheEntry->lpszSourceUrlName;
if (sUrl1.Compare(s) == )
{
//处理
}
// CTime lastModified(lpCacheEntry->LastModifiedTime);
// CTime lastAccessed(lpCacheEntry->LastAccessTime);
//a changed cookie - delete it!
// if(lastModified >= m_time || lastAccessed >= m_time){
//const CString name = lpCacheEntry->lpszSourceUrlName;
//const CString result = lastModified.Format("%I:%M:%S%p %d %b %Y");
//MessageBox (NULL, name + " last modified " + result, "Deleting cookie", MB_OK);
//DeleteUrlCacheEntry(lpCacheEntry->lpszSourceUrlName);
}
//get ready for next entry
dwTrySize = dwEntrySize;
if(!FindNextUrlCacheEntry(hCacheDir,lpCacheEntry,&dwTrySize))
{
dwError = GetLastError();
dwEntrySize = dwTrySize; //使用得到的新长度
}
else
{
dwError = ERROR_SUCCESS;
}
break;
//unknown error
default:
CString strError; strError.Format(_T("There is an error (%d) when trying deleting temporary internet files.\r\n"), dwError);
TRACE(strError);
bDone = TRUE;
break;
if(bDone)
break;
Sleep(); if(lpCacheEntry){ delete [] lpCacheEntry; lpCacheEntry = NULL;}
if(hCacheDir){ FindCloseUrlCache(hCacheDir); hCacheDir = NULL;}
break;
}
}
}
}
}
} CDHtmlDialog::OnDocumentComplete(pDisp, szUrl);
}

WebBrowser中取对应的图片资源的更多相关文章

  1. 在webBrowser中取Cookie的方法

    在很多情况下我们会使用间进程的webBrowser去实现一些网页的请求和抓去,这个时候有部分网页是取不到Cookie的,那怎么办呢?下面我提供一个方法,应该99%的都能取到, //取当前webBrow ...

  2. WinForm使用webbrowser爬取数据,中文乱码问题

    使用winform中的webbrowser抓取某个网站的数据时,遇到中文乱码的问题: 当时使用的获取网页内容的代码为: webBrowser1.DocumentText.ToString(); 不管我 ...

  3. 关于delphi点击webbrowser中任意一点的问题

    关于delphi点击webbrowser中任意一点的问题 有时候我们需要delphi载入webbrowser1打开网页的时候 需要点击某一个点的位置 可能是坐标 可能是按钮 可能是其他的控件应该如何来 ...

  4. C#:WebBrowser中伪造referer,为何对流量统计器无效?

    使用webbrowser伪造referer的方法:webBrowser1.Navigate(url, "_self", null, "Referer:http://www ...

  5. 定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表

    最近项目中有一种需求: 大致需求是这样的 通过给定的 用户名和密码 要定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表 项目的结构式struts1 hibernat ...

  6. LoadRunner中取Request、Response

    LoadRunner中取Request.Response LoadRunner两个“内置变量”: 1.REQUEST,用于提取完整的请求头信息. 2.RESPONSE,用于提取完整的响应头信息. 响应 ...

  7. C#之桶中取黑白球问题

    <编程之美>284页,问题4.6:桶中取黑白球. 有一个桶,里面有白球.黑球各100个,人们必须按照以下规则把球取出来: 1. 每次从桶中拿两个球: 2. 如果两球同色,再放入一个黑球: ...

  8. DataGrid中取HyperLinkColumn列的值,处理DataGrid中绑定的特殊字符

    DataGrid中取HyperLinkColumn列的值. /// <summary> /// 对datagrid中标签进行编码,处理特殊字符 /// </summary> / ...

  9. 【算法与数据结构】在n个数中取第k大的数(基础篇)

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 题目介绍            在n个数中取第k大的数(基础篇),之所以叫基础篇是因为还有很多更高级的算法,这些 ...

随机推荐

  1. <转>请戒掉成功学和正能量,那是麻痹人的毒药 | 新知

    非常不幸的是,这将是一场非常糟糕的演说.我不想骗你们,你们从我这里几乎什么也学不到.你们在离开的时候肯定会感到失望,你们的生活并不会得到改善. 更糟糕的是,你还会意识到生活的本质毫无意义,你的一切努力 ...

  2. jQuery中的插件的编写和使用

    1,常用的jQuery插件:表单验证插件formValidator a.目前支持5大验证方式:1.inputValidator(针对input,textarea,select控件的字符长度,值范围,选 ...

  3. R语言的数据结构

    首先声明,R语言对大小写敏感. 一.向量 vector类型可以存储数字.字符和逻辑类型.构建函数为C(): > a <- c(1,2,3,4) > b <- c('dau',' ...

  4. 分布式批处理平台(wolf)简介

    "wolf"即狼,狼的适应性很强.可栖息范围包括苔原.草原.森林.荒漠.农田等多种生境:具有敏锐的观察力.专一的目标.默契的配合,它们总能依靠团体的力量达成目标. 分布式批处理平台 ...

  5. 使用PULL方式解析XML资源文件下面的xml文件

    public class MainActivity extends Activity { private Button btn = null; private List<Map<Strin ...

  6. Flash型单片机的加密与解密

    厂商利用单片机进行产品开发时,都会关心其代码和数据的保密性.考虑到用户在编写和调试代码时所付出的时间和精力,代码的成本是不言而喻的.    早期的单片机,代码是交给芯片制造商制成掩膜ROM.有两种加密 ...

  7. 运行jar应用程序引用其他jar包的四种方法(转)

    Runnable JAR  RunnableJAR(1)在Eclipse中操作 上面的截图中eclipse的版本是: 方案二:安装Eclipse打包插件Fat Jar 方案一对于含有较多第三方jar文 ...

  8. Mac OS X Mavericks使用手册

    基本信息 作者: 施威铭研究室 出版社:清华大学出版社 ISBN:9787302386018 上架时间:2014-12-30 出版日期:2015 年1月 开本:16 版次:1-1 所属分类: 计算机 ...

  9. CentOS下安装无线网卡驱动 (转)

    1. 确定自己的网卡和内核版本:lspci | grep Network  #根据输出的信息确定网卡的型号.uname -a             #确定内核版本 2. 配置yum使用RPMForg ...

  10. 让 SpringMVC 接收多个对象的4种方法

    问题背景: 我要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVC Controller里该如何处理? 第1种方法:表单提交,以字段数组接收: 第2种方 ...