在客户端中使用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. 列表:一个打了激素的数组 - 零基础入门学习Python010

    列表:一个打了激素的数组 让编程改变世界 Change the world by program 列表:一个打了激素的数组 有时候我们需要把一堆东西暂时存储起来,因为他们有某种直接或者间接的联系,我们 ...

  2. Core Data数据持久性存储基础教程-备用

    摘要 就像我一直说的,Core Data是iOS编程,乃至Mac编程中使用持久性数据存储的最佳方式,本质上来说,Core Data使用的就是SQLite,但是通过一系列特性避免了使用SQL的一些列的麻 ...

  3. hdu 4578 Transformation

    http://acm.hdu.edu.cn/showproblem.php?pid=4578 题意:1,a,b,c代表在a,b区间的每一个数加上c:2,a,b,c代表在a,b区间的每一个数乘上c: 3 ...

  4. linux操作系下RAR的使用

    ============zip文件的操作================================== zip -r data.zip data 解释:将data文件夹压缩成了data.zip格 ...

  5. 2015第14周日WebSocket

    清明时节雨纷纷,路上行人欲断魂,借问酒家何处是?牧童遥指杏花村.每次清明都不禁想起杜牧这首诗缅怀先人,此时第一句写时间天气,第二句写人物心情,第三句写解决方法,第四句给出解决方案,脍炙人口. 刚没事看 ...

  6. 编程内功修炼之数据结构—BTree(一)

    BTree,和二叉查找树和红黑树中一样,与关键字相联系的数据作为关键字存放在同一节点上. 一颗BTree树具有如下的特性:(根为root[T]) 1)每个节点x有以下域: (a)n[x],当前存储在节 ...

  7. nodejs学习笔记之网络编程

    了解一下OSI七层模型   OSI层 功能 TCP/IP协议 应用层 文件传输,电子邮件,文件服务,虚拟终端  TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示层 数据格式化 ...

  8. 笔试、面试重点总结:WIN32、MFC与Linux

    win32 1. Win32应用程序的基本类型. 2. 创建win32窗口程序的几个步骤,及使用到的函数. 3. nmake 与 makefile. 4. 有哪些字符集? Win32对于各种字符集如何 ...

  9. 【转】多文件目录下makefile文件递归执行编译所有c文件

    首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的. 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文 ...

  10. PHP foreach()跳出本次或当前循环与终止循环方法

    PHPforeach()跳出本次或当前循环与终止循环方法 PHP中用foreach()循环中,想要在循环的时候,当满足某个条件时,想 $arr = array('a','b','c','d','e') ...