在客户端中使用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) == 0) { 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 (1) { LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry = NULL; DWORD dwEntrySize = 4096; 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,0,(PVOID)&rc1,0); SetWindowPos(NULL, 0, rc1.bottom - 4, 0, 0, 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, 0, 0, 0, 0, SWP_NOSIZE); } } if (0) { LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry = NULL; HANDLE hCacheDir = NULL; DWORD dwTrySize, dwEntrySize = 4096; 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) == 0) { //处理 } // 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(10); if(lpCacheEntry){ delete [] lpCacheEntry; lpCacheEntry = NULL;} if(hCacheDir){ FindCloseUrlCache(hCacheDir); hCacheDir = NULL;} break; } } } } } } CDHtmlDialog::OnDocumentComplete(pDisp, szUrl); }