您的位置:首页 > 运维架构 > Shell

清楚ie缓存 shellapi(附使用demo)

2015-11-06 17:37 399 查看
#pragma once

#include <wininet.h>
#include <UrlHist.h>

#pragma comment(lib,"Wininet.lib")
#pragma comment(lib,"shlwapi.lib")
#define SWEEP_BUFFER_SIZE			10000

enum DEL_CACHE_TYPE //要删除的类型。
{
File,//表示internet临时文件
Cookie //表示Cookie
};

BOOL ChangeIEVersion(std_string exeName,DWORD dVersion);//修改IE内核版本
//////////////////////////////////////////////【清除网页缓存】////////////////////////////////////////////
BOOL DeleteUrlCache(DEL_CACHE_TYPE type);
BOOL EmptyDirectory(LPCTSTR szPath, BOOL bDeleteDesktopIni = FALSE,   BOOL bWipeIndexDat = FALSE);
BOOL IsWindowsNT();//判断系统
BOOL IsWindows2k();
BOOL GetUserSid(PSID* ppSid);
void GetSidString(PSID pSid, LPTSTR szBuffer);
BOOL GetOldSD(HKEY hKey, LPCTSTR pszSubKey, BYTE** pSD);
BOOL CreateNewSD(PSID pSid, SECURITY_DESCRIPTOR* pSD, PACL* ppDacl);
BOOL RegSetPrivilege(HKEY hKey, LPCTSTR pszSubKey, SECURITY_DESCRIPTOR* pSD, BOOL bRecursive);
BOOL WipeFile(LPCTSTR szDir, LPCTSTR szFile);
#include "StdAfx.h"#include "libwz_web.h"BOOL ChangeIEVersion(std_string exeName,DWORD dVersion){//写入注册表HKEY hKey;//HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATIONLSTATUS   bres;bres   = RegOpenKeyExA(HKEY_CURRENT_USER,"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", 0, KEY_SET_VALUE, &hKey);if(bres  !=ERROR_SUCCESS){return FALSE;}bres   =RegSetValueExA(hKey,exeName.c_str(),0, REG_DWORD,(const BYTE*)&dVersion,sizeof(dVersion)) ;if(bres  !=ERROR_SUCCESS){return FALSE;}//关闭注册表:RegCloseKey(hKey);return  TRUE;}BOOL DeleteUrlCache(DEL_CACHE_TYPE type){BOOL bRet = FALSE;HANDLE hEntry;LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry = NULL;DWORD dwEntrySize;//delete the filesdwEntrySize = 0;hEntry = FindFirstUrlCacheEntry(NULL, NULL, &dwEntrySize);lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO) new char[dwEntrySize];hEntry = FindFirstUrlCacheEntry(NULL, lpCacheEntry, &dwEntrySize);if (!hEntry){goto cleanup;}do{if (type == File &&!(lpCacheEntry->CacheEntryType & COOKIE_CACHE_ENTRY)){DeleteUrlCacheEntry(lpCacheEntry->lpszSourceUrlName);}else if (type == Cookie &&(lpCacheEntry->CacheEntryType & COOKIE_CACHE_ENTRY)){DeleteUrlCacheEntry(lpCacheEntry->lpszSourceUrlName);}dwEntrySize = 0;FindNextUrlCacheEntry(hEntry, NULL, &dwEntrySize);delete [] lpCacheEntry;lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO) new char[dwEntrySize];}while (FindNextUrlCacheEntry(hEntry, lpCacheEntry, &dwEntrySize));bRet = TRUE;cleanup:if (lpCacheEntry){delete [] lpCacheEntry;}return bRet;}BOOL EmptyDirectory(LPCTSTR szPath, BOOL bDeleteDesktopIni,BOOL bWipeIndexDat){WIN32_FIND_DATA wfd;HANDLE hFind;CString sFullPath;CString sFindFilter;DWORD dwAttributes = 0;sFindFilter = szPath;sFindFilter += _T("\\*.*");if ((hFind = FindFirstFile(sFindFilter, &wfd)) == INVALID_HANDLE_VALUE){return FALSE;}do{if (_tcscmp(wfd.cFileName, _T(".")) == 0 ||_tcscmp(wfd.cFileName, _T("..")) == 0 ||(bDeleteDesktopIni == FALSE && _tcsicmp(wfd.cFileName, _T("desktop.ini")) == 0)){continue;}sFullPath = szPath;sFullPath += _T('\\');sFullPath += wfd.cFileName;//去掉只读属性dwAttributes = GetFileAttributes(sFullPath);if (dwAttributes & FILE_ATTRIBUTE_READONLY){dwAttributes &= ~FILE_ATTRIBUTE_READONLY;SetFileAttributes(sFullPath, dwAttributes);}if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){EmptyDirectory(sFullPath, bDeleteDesktopIni, bWipeIndexDat);RemoveDirectory(sFullPath);}else{if (bWipeIndexDat && _tcsicmp(wfd.cFileName, _T("index.dat")) == 0){WipeFile(szPath, wfd.cFileName);}DeleteFile(sFullPath);}}while (FindNextFile(hFind, &wfd));FindClose(hFind);return TRUE;}//判断系统类型BOOL IsWindowsNT(){BOOL bRet = FALSE;BOOL bOsVersionInfoEx;OSVERSIONINFOEX osvi;// Try calling GetVersionEx using the OSVERSIONINFOEX structure,// If that fails, try using the OSVERSIONINFO structure.ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ){// If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )return bRet;}if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && osvi.dwMajorVersion <= 4){bRet = TRUE;}return bRet;}BOOL IsWindows2k(){BOOL bRet = FALSE;BOOL bOsVersionInfoEx;OSVERSIONINFOEX osvi;// Try calling GetVersionEx using the OSVERSIONINFOEX structure,// If that fails, try using the OSVERSIONINFO structure.ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ){// If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )return bRet;}if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && osvi.dwMajorVersion >= 5){bRet = TRUE;}return bRet;}BOOL GetUserSid(PSID* ppSid){HANDLE hToken;BOOL bRes;DWORD cbBuffer, cbRequired;PTOKEN_USER pUserInfo;// The User's SID can be obtained from the process token访问令牌bRes = OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken);if (FALSE == bRes){return FALSE;}// Set buffer size to 0 for first call to determine// the size of buffer we need.cbBuffer = 0;bRes = GetTokenInformation(hToken, TokenUser, NULL, cbBuffer, &cbRequired);if (GetLastError() != ERROR_INSUFFICIENT_BUFFER){return FALSE;}// Allocate a buffer for our token user datacbBuffer = cbRequired;pUserInfo = (PTOKEN_USER) HeapAlloc(GetProcessHeap(), 0, cbBuffer);if (NULL == pUserInfo){return FALSE;}// Make the "real" callbRes = GetTokenInformation(hToken, TokenUser, pUserInfo, cbBuffer, &cbRequired);if (FALSE == bRes){return FALSE;}// Make another copy of the SID for the return valuecbBuffer = GetLengthSid(pUserInfo->User.Sid);*ppSid = (PSID) HeapAlloc(GetProcessHeap(), 0, cbBuffer);if (NULL == *ppSid){return FALSE;}bRes = CopySid(cbBuffer, *ppSid, pUserInfo->User.Sid);if (FALSE == bRes){HeapFree(GetProcessHeap(), 0, *ppSid);return FALSE;}bRes = HeapFree(GetProcessHeap(), 0, pUserInfo);return TRUE;}void GetSidString(PSID pSid, LPTSTR szBuffer){//convert SID to stringSID_IDENTIFIER_AUTHORITY *psia = ::GetSidIdentifierAuthority( pSid );DWORD dwTopAuthority = psia->Value[5];_stprintf(szBuffer, _T("S-1-%lu"), dwTopAuthority);TCHAR szTemp[32];int iSubAuthorityCount = *(GetSidSubAuthorityCount(pSid));for (int i = 0; i<iSubAuthorityCount; i++){DWORD dwSubAuthority = *(GetSidSubAuthority(pSid, i));_stprintf(szTemp, _T("%lu"), dwSubAuthority);_tcscat(szBuffer, _T("-"));_tcscat(szBuffer, szTemp);}}BOOL GetOldSD(HKEY hKey, LPCTSTR pszSubKey, BYTE** pSD){BOOL bRet = FALSE;HKEY hNewKey = NULL;DWORD dwSize = 0;LONG lRetCode;*pSD = NULL;lRetCode = RegOpenKeyEx(hKey, pszSubKey, 0, READ_CONTROL, &hNewKey);if(lRetCode != ERROR_SUCCESS)goto cleanup;lRetCode = RegGetKeySecurity(hNewKey,(SECURITY_INFORMATION)DACL_SECURITY_INFORMATION, *pSD, &dwSize);if (lRetCode == ERROR_INSUFFICIENT_BUFFER){*pSD = new BYTE[dwSize];lRetCode = RegGetKeySecurity(hNewKey,(SECURITY_INFORMATION)DACL_SECURITY_INFORMATION, *pSD, &dwSize);if(lRetCode != ERROR_SUCCESS){delete *pSD;*pSD = NULL;goto cleanup;}}else if (lRetCode != ERROR_SUCCESS)goto cleanup;bRet = TRUE; // indicate successcleanup:if (hNewKey){RegCloseKey(hNewKey);}return bRet;}BOOL CreateNewSD(PSID pSid, SECURITY_DESCRIPTOR* pSD, PACL* ppDacl){BOOL bRet = FALSE;PSID pSystemSid = NULL;SID_IDENTIFIER_AUTHORITY sia = SECURITY_NT_AUTHORITY;ACCESS_ALLOWED_ACE* pACE = NULL;DWORD dwAclSize;DWORD dwAceSize;// prepare a Sid representing local system accountif(!AllocateAndInitializeSid(&sia, 1, SECURITY_LOCAL_SYSTEM_RID,0, 0, 0, 0, 0, 0, 0, &pSystemSid)){goto cleanup;}// compute size of new acldwAclSize = sizeof(ACL) + 2 * (sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD)) +GetLengthSid(pSid) + GetLengthSid(pSystemSid);// allocate storage for Acl*ppDacl = (PACL)HeapAlloc(GetProcessHeap(), 0, dwAclSize);if(*ppDacl == NULL)goto cleanup;if(!InitializeAcl(*ppDacl, dwAclSize, ACL_REVISION))goto cleanup;//    if(!AddAccessAllowedAce(pDacl, ACL_REVISION, KEY_WRITE, pSid))//		goto cleanup;// add current userdwAceSize = sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD) + GetLengthSid(pSid);pACE = (ACCESS_ALLOWED_ACE *)HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, dwAceSize);pACE->Mask = KEY_READ | KEY_WRITE | KEY_ALL_ACCESS;pACE->Header.AceType = ACCESS_ALLOWED_ACE_TYPE;pACE->Header.AceFlags = CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE;pACE->Header.AceSize = dwAceSize;memcpy(&pACE->SidStart, pSid, GetLengthSid(pSid));if (!AddAce(*ppDacl, ACL_REVISION, MAXDWORD, pACE, dwAceSize))goto cleanup;// add local system accountHeapFree(GetProcessHeap(), 0, pACE);pACE = NULL;dwAceSize = sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD) + GetLengthSid(pSystemSid);pACE = (ACCESS_ALLOWED_ACE *)HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, dwAceSize);pACE->Mask = KEY_READ | KEY_WRITE | KEY_ALL_ACCESS;pACE->Header.AceType = ACCESS_ALLOWED_ACE_TYPE;pACE->Header.AceFlags = CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE;pACE->Header.AceSize = dwAceSize;memcpy(&pACE->SidStart, pSystemSid, GetLengthSid(pSystemSid));if (!AddAce(*ppDacl, ACL_REVISION, MAXDWORD, pACE, dwAceSize))goto cleanup;if(!InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION))goto cleanup;if(!SetSecurityDescriptorDacl(pSD, TRUE, *ppDacl, FALSE))goto cleanup;bRet = TRUE; // indicate successcleanup:if(pACE != NULL)HeapFree(GetProcessHeap(), 0, pACE);if(pSystemSid != NULL)FreeSid(pSystemSid);return bRet;}BOOL RegSetPrivilege(HKEY hKey, LPCTSTR pszSubKey,SECURITY_DESCRIPTOR* pSD, BOOL bRecursive){BOOL bRet = FALSE;HKEY hSubKey = NULL;LONG lRetCode;LPTSTR pszKeyName = NULL;;DWORD dwSubKeyCnt;DWORD dwMaxSubKey;DWORD dwValueCnt;DWORD dwMaxValueName;DWORD dwMaxValueData;DWORD i;if (!pszSubKey)goto cleanup;// open the key for WRITE_DAC accesslRetCode = RegOpenKeyEx(hKey, pszSubKey, 0, WRITE_DAC, &hSubKey);if(lRetCode != ERROR_SUCCESS)goto cleanup;// apply the security descriptor to the registry keylRetCode = RegSetKeySecurity(hSubKey,(SECURITY_INFORMATION)DACL_SECURITY_INFORMATION, pSD);if( lRetCode != ERROR_SUCCESS )goto cleanup;if (bRecursive){// reopen the key for KEY_READ accessRegCloseKey(hSubKey);hSubKey = NULL;lRetCode = RegOpenKeyEx(hKey, pszSubKey, 0, KEY_READ, &hSubKey);if(lRetCode != ERROR_SUCCESS)goto cleanup;// first get an info about this subkey ...lRetCode = RegQueryInfoKey(hSubKey, 0, 0, 0, &dwSubKeyCnt, &dwMaxSubKey,0, &dwValueCnt, &dwMaxValueName, &dwMaxValueData, 0, 0);if( lRetCode != ERROR_SUCCESS )goto cleanup;// enumerate the subkeys and call RegTreeWalk() recursivlypszKeyName = new TCHAR [MAX_PATH + 1];for (i=0 ; i<dwSubKeyCnt; i++){lRetCode = RegEnumKey(hSubKey, i, pszKeyName, MAX_PATH + 1);if(lRetCode == ERROR_SUCCESS){RegSetPrivilege(hSubKey, pszKeyName, pSD, TRUE);}else if(lRetCode == ERROR_NO_MORE_ITEMS){break;}}delete [] pszKeyName ;}bRet = TRUE; // indicate successcleanup:if (hSubKey){RegCloseKey(hSubKey);}return bRet;}BOOL WipeFile(LPCTSTR szDir, LPCTSTR szFile){CString sPath;HANDLE	hFile;DWORD	dwSize;DWORD	dwWrite;char	sZero[SWEEP_BUFFER_SIZE];memset(sZero, 0, SWEEP_BUFFER_SIZE);sPath = szDir;sPath += _T('\\');sPath += szFile;hFile = CreateFile(sPath, GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE){return FALSE;}dwSize = GetFileSize(hFile, NULL);//skip file header (actually, I don't know the file format of index.dat)dwSize -= 64;SetFilePointer(hFile, 64, NULL, FILE_BEGIN);while (dwSize > 0){if (dwSize > SWEEP_BUFFER_SIZE){WriteFile(hFile, sZero, SWEEP_BUFFER_SIZE, &dwWrite, NULL);dwSize -= SWEEP_BUFFER_SIZE;}else{WriteFile(hFile, sZero, dwSize, &dwWrite, NULL);break;}}CloseHandle(hFile);return TRUE;}
//使用demo
	//更改网页ie内核版本BOOL    bRes  =FALSE;bRes   = ChangeIEVersion("MagicClient.exe",9000);if(bRes){logs->WriteFormat("【////////////////////////////////////////////////清除ie缓存;修改IE版本成功!/////////////////////////////////////////////////】");}
void ClearWebCache(){TCHAR szPath[MAX_PATH];//清internet临时文件DeleteUrlCache(File);if (SHGetSpecialFolderPath(NULL, szPath, CSIDL_INTERNET_CACHE, FALSE)){  //得到临时目录,并清空它.EmptyDirectory(szPath);}//Cookie的清除DeleteUrlCache(Cookie);if (SHGetSpecialFolderPath(NULL, szPath, CSIDL_COOKIES, FALSE)){//得到目录,并清空EmptyDirectory(szPath);}//清收藏夹中的内容if (SHGetSpecialFolderPath(NULL, szPath, CSIDL_FAVORITES, FALSE)){ //得到目录,并清空EmptyDirectory(szPath);}//清除网络联接历史记录if (SHGetSpecialFolderPath(NULL, szPath, CSIDL_NETHOOD, FALSE)){ //得到目录,并清空EmptyDirectory(szPath);}// //清"文档"中的历史记录if (SHGetSpecialFolderPath(NULL, szPath, CSIDL_RECENT, FALSE)){EmptyDirectory(szPath);}// //清系统临时文件夹if (GetTempPath(MAX_PATH, szPath))//得到系统临时目录{EmptyDirectory(szPath, TRUE);}SHDeleteKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RecentDocs"));//浏览器地址栏历史地址的清除SHDeleteKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Internet Explorer\\TypedURLs"));// 清除自动密码历史记录SHDeleteKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Internet Explorer\\IntelliForms"));// 清RAS自动拨号历史记录SHDeleteKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\RAS Autodial\\Addresses"));// 清空回收站SHEmptyRecycleBin(NULL, NULL,SHERB_NOCONFIRMATION | SHERB_NOPROGRESSUI | SHERB_NOSOUND);// 清除"运行"中的自动匹配历史记录SHDeleteKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU"));// 清除上次登陆用户记录SHDeleteValue(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon"),_T("DefaultUserName"));SHDeleteValue(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon"),_T("AltDefaultUserName"));SHDeleteValue(HKEY_LOCAL_MACHINE,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Winlogon"),_T("DefaultUserName"));//清除"查找文件"自动匹配历史记录SHDeleteKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Doc Find Spec MRU"));SHDeleteKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Internet Explorer\\Explorer Bars\\{C4EE31F3-4768-11D2-BE5C-00A0C9A83DA1}\\ContainingTextMRU"));SHDeleteKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Internet Explorer\\Explorer Bars\\{C4EE31F3-4768-11D2-BE5C-00A0C9A83DA1}\\FilesNamedMRU"));// 清除"查找计算机"自动匹配历史记录SHDeleteKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FindComputerMRU"));SHDeleteKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Internet Explorer\\Explorer Bars\\{C4EE31F3-4768-11D2-BE5C-00A0C9A83DA1}\\ComputerNameMRU"));// 清远程登录历史记录CString sKey;for (int i=1; i<=8; i++){sKey.Format(_T("Machine%d"), i);SHDeleteValue(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Telnet"), sKey);sKey.Format(_T("Service%d"), i);SHDeleteValue(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Telnet"), sKey);sKey.Format(_T("TermType%d"), i);SHDeleteValue(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Telnet"), sKey);}SHDeleteValue(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Telnet"), _T("LastMachine"));SHDeleteValue(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Telnet"), _T("LastService"));SHDeleteValue(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Telnet"), _T("LastTermType"));/////////////////////////////////////////////////////////////// 清除表单自动完成历史记录CString  sKeyTwo;DWORD dwRet;if (IsWindows2k() || IsWindowsNT())//先判断系统{CString sBaseKey;SECURITY_DESCRIPTOR NewSD;BYTE* pOldSD;PACL pDacl = NULL;PSID pSid = NULL;TCHAR szSid[256];if (GetUserSid(&pSid)){//get the hiden key nameGetSidString(pSid, szSid);sKeyTwo = _T("Software\\Microsoft\\Protected Storage System Provider\\");sKeyTwo += szSid;//get old SDsBaseKey = sKeyTwo;GetOldSD(HKEY_CURRENT_USER, sBaseKey, &pOldSD);//set new SD and then clearif (CreateNewSD(pSid, &NewSD, &pDacl)){RegSetPrivilege(HKEY_CURRENT_USER, sKeyTwo, &NewSD, FALSE);sKeyTwo += _T("\\Data");RegSetPrivilege(HKEY_CURRENT_USER, sKeyTwo, &NewSD, FALSE);sKeyTwo += _T("\\e161255a-37c3-11d2-bcaa-00c04fd929db");RegSetPrivilege(HKEY_CURRENT_USER, sKeyTwo, &NewSD, TRUE);dwRet = SHDeleteKey(HKEY_CURRENT_USER, sKeyTwo);}if (pDacl != NULL)HeapFree(GetProcessHeap(), 0, pDacl);//restore old SDif (pOldSD){RegSetPrivilege(HKEY_CURRENT_USER, sBaseKey,(SECURITY_DESCRIPTOR*)pOldSD, FALSE);delete pOldSD;}}if (pSid)HeapFree(GetProcessHeap(), 0, pSid);}//win9xDWORD dwSize = MAX_PATH;TCHAR szUserName[MAX_PATH];GetUserName(szUserName, &dwSize);sKeyTwo = _T("Software\\Microsoft\\Protected Storage System Provider\\");sKeyTwo += szUserName;sKeyTwo += _T("\\Data\\e161255a-37c3-11d2-bcaa-00c04fd929db");dwRet = SHDeleteKey(HKEY_LOCAL_MACHINE, sKeyTwo);////////////////////////////////////////////////////////////// 清浏览网址历史记录HRESULT hr;IUrlHistoryStg2* pUrlHistoryStg2 = NULL;hr = CoCreateInstance(CLSID_CUrlHistory, NULL,CLSCTX_INPROC_SERVER, IID_IUrlHistoryStg2,(void**)&pUrlHistoryStg2);if (SUCCEEDED(hr)){hr = pUrlHistoryStg2->ClearHistory();pUrlHistoryStg2->Release();}// 如果上面代码不能清// 则有下面的,不完美,但能工作.GetWindowsDirectory(szPath, MAX_PATH);_tcscat(szPath, _T("\\History"));EmptyDirectory(szPath, FALSE, TRUE);if (SHGetSpecialFolderPath(NULL, szPath, CSIDL_HISTORY, FALSE)){EmptyDirectory(szPath, FALSE, TRUE);}///////////////////////////////////////////////////////////////////}
//duilib 网页控件 不读缓存的访问网页(经测试还是上面的方面管用)
		IWebBrowser2*    pWb =   m_ChatWeb->GetWebBrowser2();CVariant tempUrl,noCache;tempUrl.vt=VT_BSTR;tempUrl.bstrVal=T2BSTR(CA2T(url.c_str()));noCache.vt = VT_INT;noCache.intVal  =BrowserNavConstants::navNoReadFromCache | BrowserNavConstants::navNoHistory;if(pWb){HRESULT   hr  =pWb->Navigate2(&tempUrl,&noCache,NULL,NULL,NULL);}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: