WebBrowser中取对应的图片资源
在客户端中使用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中取对应的图片资源的更多相关文章
- 在webBrowser中取Cookie的方法
在很多情况下我们会使用间进程的webBrowser去实现一些网页的请求和抓去,这个时候有部分网页是取不到Cookie的,那怎么办呢?下面我提供一个方法,应该99%的都能取到, //取当前webBrow ...
- WinForm使用webbrowser爬取数据,中文乱码问题
使用winform中的webbrowser抓取某个网站的数据时,遇到中文乱码的问题: 当时使用的获取网页内容的代码为: webBrowser1.DocumentText.ToString(); 不管我 ...
- 关于delphi点击webbrowser中任意一点的问题
关于delphi点击webbrowser中任意一点的问题 有时候我们需要delphi载入webbrowser1打开网页的时候 需要点击某一个点的位置 可能是坐标 可能是按钮 可能是其他的控件应该如何来 ...
- C#:WebBrowser中伪造referer,为何对流量统计器无效?
使用webbrowser伪造referer的方法:webBrowser1.Navigate(url, "_self", null, "Referer:http://www ...
- 定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表
最近项目中有一种需求: 大致需求是这样的 通过给定的 用户名和密码 要定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表 项目的结构式struts1 hibernat ...
- LoadRunner中取Request、Response
LoadRunner中取Request.Response LoadRunner两个“内置变量”: 1.REQUEST,用于提取完整的请求头信息. 2.RESPONSE,用于提取完整的响应头信息. 响应 ...
- C#之桶中取黑白球问题
<编程之美>284页,问题4.6:桶中取黑白球. 有一个桶,里面有白球.黑球各100个,人们必须按照以下规则把球取出来: 1. 每次从桶中拿两个球: 2. 如果两球同色,再放入一个黑球: ...
- DataGrid中取HyperLinkColumn列的值,处理DataGrid中绑定的特殊字符
DataGrid中取HyperLinkColumn列的值. /// <summary> /// 对datagrid中标签进行编码,处理特殊字符 /// </summary> / ...
- 【算法与数据结构】在n个数中取第k大的数(基础篇)
(转载请注明出处:http://blog.csdn.net/buptgshengod) 题目介绍 在n个数中取第k大的数(基础篇),之所以叫基础篇是因为还有很多更高级的算法,这些 ...
随机推荐
- STL set容器添加结构体并排序
#include <iostream> #include <string> #include <cstring> //strcpy #include <cst ...
- (原)python中import caffe提示no module named google.protobuf.internal
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5993405.html 之前在一台台式机上在python中使用import caffe时,没有出错.但是 ...
- uva 10061 How many zero's and how many digits ?
How many zeros and how many digits? Input: standard input Output: standard output Given a decimal in ...
- JS+css滑动菜单简单实现
JS+css滑动菜单 制作一个简单的滑动菜单,当鼠标指向菜单标题时,滑出二级菜单.移开时二级菜单隐藏.目标很简单,实践时有一些细节需要注意,比如鼠标移向二级菜单的 过程中,二级菜单消失了.还有定位出错 ...
- iframe的操作
获取iframe的window,获取Iframe的document,获取父页面的window,某个环境是否iframe,动态创建iframe 这是demo.html,这个页用iframe嵌入了ifra ...
- MySQL用户远程登陆
默认情况下,root用户是不具备远程登录的权限. 1.切换mysql表,查看当前用户信息 select host,user from user where user = 'root' 2.给用户进行授 ...
- Uubntu14.04 LST安装NodeJS
1:从官网下载node.js源码http://nodejs.org/download/ 当前最新版为node-v0.10.33 2:安装 $ tar zxvf node-v0.10.33.tar.gz ...
- 暴力破解UltraEdit v21 无需注册
一.复制一份UltraEdit安装目录中的主程序uedit32.exe,到任意目录,用UltraEdit打开复制的uedit32.exe文件. 二.修改以下内容 原来:00094750h: BE DC ...
- Linux 下通过脚本实现远程自动备份
考虑到在本机上备份数据,一旦该机器硬盘出现故障,数据无法取出.远程手动备份数据费时费力且不及时.最好的方法就是通过脚本实现远程自动互备.但远程无论是通过SSH登陆,还是通过scp拷贝文件都需要输入密码 ...
- Apache RewriteRule QSA 什么意思
看到下面这段代码: RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.+)$ index.php?url=$1 [QSA,L] The Rewrit ...