些常用网络工具历史记录的清理(C++)

bool ClearIEHistory(void)   //清理IE缓存
{
 try
 {
  //页面文件的清理
  HANDLE hEntry;
  LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry = NULL; 
  DWORD dwEntrySize = 0;

  hEntry = FindFirstUrlCacheEntry(NULL, NULL, &dwEntrySize);
  lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO) new char[dwEntrySize];
  hEntry = FindFirstUrlCacheEntry(NULL, lpCacheEntry, &dwEntrySize);
  if(hEntry)
  {
   do
   {
    DeleteUrlCacheEntry(lpCacheEntry->lpszSourceUrlName);
    dwEntrySize = 0;
    FindNextUrlCacheEntry(hEntry, NULL, &dwEntrySize);
    delete [] lpCacheEntry;
    lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO) new char[dwEntrySize];
   }
   while (FindNextUrlCacheEntry(hEntry, lpCacheEntry, &dwEntrySize));
  }

  // 清浏览网址历史记录
  HRESULT hr;
  IUrlHistoryStg2* pUrlHistoryStg2 = NULL;
  CoInitialize(NULL);
  hr = CoCreateInstance(CLSID_CUrlHistory, NULL, CLSCTX_INPROC_SERVER, IID_IUrlHistoryStg2, (void**)&pUrlHistoryStg2);
  if (SUCCEEDED(hr))
  {
   hr = pUrlHistoryStg2->ClearHistory();
   pUrlHistoryStg2->Release();
  }
  CoUninitialize();

  //浏览器地址栏历史地址的清除
  SHDeleteKey(HKEY_CURRENT_USER, _TEXT("Software//Microsoft//Internet Explorer//TypedURLs"));

  return true;
 }
 catch(...)
 {
  return false;
 }
}

bool ClearQQHistory(void)   //清理QQ账户文件夹
{
 try
 {
  LPCTSTR szFullPath, szDirectory;
  LPCTSTR szQQRegPath = _TEXT("SOFTWARE//Tencent//PlatForm_Type_List//1//");
  LPCTSTR szTMRegPath = _TEXT("SOFTWARE//Tencent//PlatForm_Type_List//2//");
  LPCTSTR szQQGameRegPath = _TEXT("SOFTWARE//Tencent//QQGame//SYS//");
  LPCTSTR szQQGameCfgFile = _TEXT("config//Info.ini");

  if( FindKey_STR(true, szQQRegPath, _TEXT("TypePath")) )
  {
   if( ReadKey_STR(true, szQQRegPath, _TEXT("TypePath"), MAX_PATH, szFullPath) )
   {
    if(lstrlen(szFullPath)>=9)
    {
     szDirectory = new const TCHAR[lstrlen(szFullPath)-6+1]; // /QQ.exe
     memset((LPTSTR)szDirectory, TCHAR('/0'), lstrlen(szFullPath)-6+1);
     _tcsncpy((LPTSTR)szDirectory, szFullPath, lstrlen(szFullPath)-6);
     DeleteAccountFolders(szDirectory, _TEXT("LoginUinList.DAT"));
    }
   }
  }

  if( FindKey_STR(true, szTMRegPath, _TEXT("TypePath")) )
  {
   if( ReadKey_STR(true, szTMRegPath, _TEXT("TypePath"), MAX_PATH, szFullPath) )
   {
    if(lstrlen(szFullPath)>=16)
    {
     szDirectory = new const TCHAR[lstrlen(szFullPath)-13+1]; // /TMDlls/TM.exe
     memset((LPTSTR)szDirectory, TCHAR('/0'), lstrlen(szFullPath)-13+1);
     _tcsncpy((LPTSTR)szDirectory, szFullPath, lstrlen(szFullPath)-13);
     DeleteAccountFolders(szDirectory, _TEXT("LoginUinList.DAT"));
    }
   }
  }

  if( FindKey_STR(true, szQQGameRegPath, _TEXT("HallDirectory")) )
  {
   if( ReadKey_STR(true, szQQGameRegPath, _TEXT("HallDirectory"), MAX_PATH, szFullPath) )
   {
    DeleteAccountFolders(szFullPath, _TEXT("User.cfg"));
    LPCTSTR szCfgFile;
    if(szDirectory[lstrlen(szFullPath)-1] != TCHAR('//'))
    {
     szCfgFile = new const TCHAR[lstrlen(szFullPath)+lstrlen(szQQGameCfgFile)+2];
     lstrcpy((LPTSTR)szCfgFile, szFullPath);
     lstrcat((LPTSTR)szCfgFile, _TEXT("//"));
     lstrcat((LPTSTR)szCfgFile, szQQGameCfgFile);
    }
    else
    {
     szCfgFile = new const TCHAR[lstrlen(szFullPath)+lstrlen(szQQGameCfgFile)+1];
     lstrcpy((LPTSTR)szCfgFile, szFullPath);
     lstrcat((LPTSTR)szCfgFile, szQQGameCfgFile);
    }
    DeleteFile(szCfgFile);
   }
  }

  return true;
 }
 catch(...)
 {
  return false;
 }
}

bool ClearMSNHistory(void)   //清理MSN账户文件夹
{
 try
 {
  LPCTSTR szFullPath, szDirectory;
  LPCTSTR* szSubKeysList;
  DWORD dwListLen;
  LPCTSTR szMSNRegPath = _TEXT("Software//Microsoft//MSNMessenger//PerPassportSettings//");
  LPCTSTR szMSNUserPath = _TEXT("Software//Microsoft//IdentityCRL//");
  LPCTSTR szMSNUserPathEx = _TEXT("Creds//");
  LPCTSTR szMSNUserMajor = _TEXT("ConfigMajorVersion");
  LPCTSTR szMSNUserMinor = _TEXT("ConfigMinorVersion");

  szFullPath = new const TCHAR[lstrlen(szMSNUserPath)+lstrlen(szMSNUserPathEx)+1];
  lstrcpy((LPTSTR)szFullPath, szMSNUserPath);
  lstrcat((LPTSTR)szFullPath, szMSNUserPathEx);
  SHDeleteKey(HKEY_CURRENT_USER, szFullPath);
  DeleteKey(false, szMSNUserPath, szMSNUserMajor);
  DeleteKey(false, szMSNUserPath, szMSNUserMinor);

  if( ReadKey_SUBKEYS(false, szMSNRegPath, MAX_PATH, szSubKeysList, dwListLen) )
  {
   for(DWORD nCount=0; nCount<dwListLen; nCount++)
   {
    if( lstrcmp(szSubKeysList[nCount], _TEXT("0")) == 0 )
    {
     continue;
    }
    if(szSubKeysList[nCount][lstrlen(szSubKeysList[nCount])-1] != TCHAR('//'))
    {
     szFullPath = new const TCHAR[lstrlen(szMSNRegPath)+lstrlen(szSubKeysList[nCount])+2];
     memset((LPTSTR)szFullPath, TCHAR('/0'), lstrlen(szMSNRegPath)+lstrlen(szSubKeysList[nCount])+2);
     lstrcpy((LPTSTR)szFullPath, szMSNRegPath);
     lstrcat((LPTSTR)szFullPath, szSubKeysList[nCount]);
     lstrcat((LPTSTR)szFullPath, _TEXT("//"));
    }
    else
    {
     szFullPath = new const TCHAR[lstrlen(szMSNRegPath)+lstrlen(szSubKeysList[nCount])+1];
     memset((LPTSTR)szFullPath, TCHAR('/0'), lstrlen(szMSNRegPath)+lstrlen(szSubKeysList[nCount])+1);
     lstrcpy((LPTSTR)szFullPath, szMSNRegPath);
     lstrcat((LPTSTR)szFullPath, szSubKeysList[nCount]);
    }
    if( FindKey_STR(false, szFullPath, _TEXT("MessageLogPath")) )
    {
     szDirectory = new const TCHAR[MAX_PATH*2];
     memset((LPTSTR)szDirectory, TCHAR('/0'), MAX_PATH*2);
     if( ReadKey_STR(false, szFullPath, _TEXT("MessageLogPath"), MAX_PATH*2, szDirectory) )
     {
      DeleteFolder(szDirectory);
     }
    }
    SHDeleteKey(HKEY_CURRENT_USER, szFullPath);
   }
  }
  else
  {
   return false;
  }

  return true;
 }
 catch(...)
 {
  return false;
 }
}

bool DeleteAccountFolders(LPCTSTR szDirectory, LPCTSTR szListFileName) //删除所有的号码文件夹
{
 try
 {
  if( !::PathFileExists(szDirectory) )
  {
   return false;
  }

  LPCTSTR szSerach;

  if(szDirectory[lstrlen(szDirectory)-1] != TCHAR('//'))
  {
   szSerach = new const TCHAR[lstrlen(szDirectory)+5];
   memset((LPTSTR)szSerach, TCHAR('/0'), lstrlen(szDirectory)+5);
   lstrcpy((LPTSTR)szSerach, szDirectory);
   lstrcat((LPTSTR)szSerach, _TEXT("//*.*"));
  }
  else
  {
   szSerach = new const TCHAR[lstrlen(szDirectory)+4];
   memset((LPTSTR)szSerach, TCHAR('/0'), lstrlen(szDirectory)+4);
   lstrcpy((LPTSTR)szSerach, szDirectory);
   lstrcat((LPTSTR)szSerach, _TEXT("*.*"));
  }

  WIN32_FIND_DATA wfd;
  HANDLE hFind;

  if ((hFind = FindFirstFile(szSerach, &wfd)) == INVALID_HANDLE_VALUE)
  {
   return false;
  }

  LPCTSTR szFullPath;
  bool bNeedDelete;

  do
  {
   bNeedDelete = true;

   if( (lstrcmp(wfd.cFileName, _TEXT("0")) == 0)||(lstrcmp(wfd.cFileName, _TEXT("//0")) == 0) ) //"0"是特殊文件夹
   {
    continue;
   }

   szFullPath = new const TCHAR[lstrlen(szDirectory)+lstrlen(wfd.cFileName)+1];
   memset((LPTSTR)szFullPath, TCHAR('/0'), lstrlen(szDirectory)+lstrlen(wfd.cFileName)+1);
   lstrcpy((LPTSTR)szFullPath, szDirectory);
   lstrcat((LPTSTR)szFullPath, wfd.cFileName);
   if(FALSE == PathIsDirectory(szFullPath)) //是否是文件夹
   {
    if( _tcsicmp(wfd.cFileName, szListFileName) == 0 ) //号码列表文件
    {
     DeleteFile(szFullPath);
    }
    continue;
   }

   for(u_short nCount=0; nCount<lstrlen(wfd.cFileName); nCount++)
   {
    if( (wfd.cFileName[nCount] < TCHAR('0'))||(wfd.cFileName[nCount] > TCHAR('9')) ) //是否为纯数字
    {
     if(wfd.cFileName[nCount] != TCHAR('//'))
     {
      bNeedDelete = false;
      break;
     }
    }
   }

   if(bNeedDelete)
   {
    DeleteFolder(szFullPath);
   }
  }
  while( FindNextFile(hFind, &wfd) );

  return true;
 }
 catch(...)
 {
  return false;
 }
}

bool DeleteFolder(LPCTSTR szFolderName) //删除某个文件夹
{
 try
 {
  if( (!::PathFileExists(szFolderName))||(FALSE == PathIsDirectory(szFolderName)) )
  {
   return false;
  }

  LPCTSTR szNewFolderName;
  if(szFolderName[lstrlen(szFolderName)-1] == TCHAR('//'))
  {
   szNewFolderName = new const TCHAR[lstrlen(szFolderName)+1];
   memset((LPTSTR)szNewFolderName, TCHAR('/0'), lstrlen(szFolderName)+1); //szNewFolderName 后面需要两个字串结束符
   _tcsncpy((LPTSTR)szNewFolderName, szFolderName, lstrlen(szFolderName)-1);
  }
  else
  {
   szNewFolderName = new const TCHAR[lstrlen(szFolderName)+2];
   memset((LPTSTR)szNewFolderName, TCHAR('/0'), lstrlen(szFolderName)+2); //szNewFolderName 后面需要两个字串结束符
   _tcscpy((LPTSTR)szNewFolderName, szFolderName);
  }

  SHFILEOPSTRUCT fos;
  ZeroMemory(&fos, sizeof(fos));
  fos.hwnd = HWND_DESKTOP;
  fos.wFunc = FO_DELETE;
  fos.fFlags = FOF_SILENT|FOF_NOCONFIRMATION|FOF_NOERRORUI;//|FOF_ALLOWUNDO;
  fos.pFrom = szNewFolderName;
  if(SHFileOperation(&fos) == 0)
  {
   return true;
  }
  return false;
 }
 catch( ... )
 {
  return false;
 }
}

 

 

******************************************************************************

 

 

bool FindKey_STR(bool RegRootFlag, LPCTSTR RegPath, LPCTSTR theKey)
{
 HKEY hKEY;
 try
 {
  long lRet;
  if(RegRootFlag)
  {
   lRet = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegPath, 0, KEY_QUERY_VALUE, &hKEY));
  }
  else
  {
   lRet = (::RegOpenKeyEx(HKEY_CURRENT_USER, RegPath, 0, KEY_QUERY_VALUE, &hKEY));
  }
  if(lRet != ERROR_SUCCESS)
  {
   ::RegCloseKey(hKEY);
   return false;
  }
  DWORD dwKeyType = REG_SZ;
  lRet =::RegQueryValueEx(hKEY, theKey, NULL, &dwKeyType, NULL, NULL);
  if( lRet != ERROR_SUCCESS )
  {
   ::RegCloseKey(hKEY);
   return false;
  }
  ::RegCloseKey(hKEY);
  return true;
 }
 catch( ... )
 {
  ::RegCloseKey(hKEY);
  return false;
 }
}

bool ReadKey_STR(bool RegRootFlag, LPCTSTR RegPath, LPCTSTR theKey, DWORD KeyLength, LPCTSTR &theKeyValue)
{
 HKEY hKEY;
 KeyLength = (KeyLength+1)*sizeof(TCHAR);
 LPBYTE lpKeyValue = new BYTE[KeyLength];
 try
 {
  long lRet;
  if(RegRootFlag)
  {
   lRet = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegPath, 0, KEY_READ, &hKEY));
  }
  else
  {
   lRet = (::RegOpenKeyEx(HKEY_CURRENT_USER, RegPath, 0, KEY_READ, &hKEY));
  }
  if(lRet != ERROR_SUCCESS)
  {
   ::RegCloseKey(hKEY);
   delete[] lpKeyValue;
   return false;
  }
  DWORD dwKeyType = REG_SZ;
  if(KeyLength == 0)
  {
   KeyLength = 5;
  }
  lRet =::RegQueryValueEx(hKEY, theKey, NULL, &dwKeyType, lpKeyValue, &KeyLength);
  if( lRet == ERROR_MORE_DATA )
  {
   LPBYTE lpKeyValue = new BYTE[KeyLength];
   lRet =::RegQueryValueEx(hKEY, theKey, NULL, &dwKeyType, lpKeyValue, &KeyLength);
  }
  theKeyValue = (LPCTSTR)lpKeyValue;
  if(lRet != ERROR_SUCCESS)
  {
   ::RegCloseKey(hKEY);
   delete[] lpKeyValue;
   return false;
  }
  ::RegCloseKey(hKEY);
  //delete[] lpKeyValue;
  return true;
 }
 catch( ... )
 {
  ::RegCloseKey(hKEY);
  delete[] lpKeyValue;
  return false;
 }
}

bool WriteKey_STR(bool RegRootFlag, LPCTSTR RegPath, LPCTSTR theKey, DWORD KeyLength, LPCTSTR theKeyValue)
{
 HKEY hKEY;
 KeyLength = (KeyLength+1)*sizeof(TCHAR);
 const BYTE* lpKeyValue = (LPBYTE)theKeyValue;
 try
 {
  long lRet;
  DWORD dwDisposition;
  if(RegRootFlag)
  {
   lRet = (::RegCreateKeyEx(HKEY_LOCAL_MACHINE, RegPath, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKEY, &dwDisposition));
  }
  else
  {
   lRet = (::RegCreateKeyEx(HKEY_CURRENT_USER, RegPath, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKEY, &dwDisposition));
  }
  if(lRet != ERROR_SUCCESS)
  {
   ::RegCloseKey(hKEY);
   delete[] lpKeyValue;
   return false;
  }
  DWORD dwKeyType = REG_SZ;
  if(KeyLength == 0)
  {
   KeyLength = 260;
  }
  lRet =::RegSetValueEx(hKEY, theKey, NULL, dwKeyType, lpKeyValue, KeyLength);
  if(lRet != ERROR_SUCCESS)
  {
   ::RegCloseKey(hKEY);
   delete[] lpKeyValue;
   return false;
  }
  return true;
 }
 catch( ... )
 {
  ::RegCloseKey(hKEY);
  delete[] lpKeyValue;
  return false;
 }
}

bool DeleteKey(bool RegRootFlag, LPCTSTR RegPath, LPCTSTR theKey)
{
 HKEY hKEY; 
 try
 {
  long lRet;
  if(RegRootFlag)
  {
   lRet = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegPath, 0, KEY_ALL_ACCESS, &hKEY));
  }
  else
  {
   lRet = (::RegOpenKeyEx(HKEY_CURRENT_USER, RegPath, 0, KEY_ALL_ACCESS, &hKEY));
  }
  if(lRet != ERROR_SUCCESS)
  {
   ::RegCloseKey(hKEY);
   return false;
  }
  lRet =::RegDeleteValue(hKEY, theKey);
  ::RegCloseKey(hKEY);
  return true;
 }
 catch( ... )
 {
  ::RegCloseKey(hKEY);
  return false;
 }
}

bool ReadKey_SUBKEYS(bool RegRootFlag, LPCTSTR RegPath, DWORD SubKeyLength, LPCTSTR* &theKeysList, DWORD &ListLen)
{
 HKEY hKEY;
 try
 {
  long lRet;
  if(RegRootFlag)
  {
   lRet = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegPath, 0, KEY_ENUMERATE_SUB_KEYS, &hKEY));
  }
  else
  {
   lRet = (::RegOpenKeyEx(HKEY_CURRENT_USER, RegPath, 0, KEY_ENUMERATE_SUB_KEYS, &hKEY));
  }
  if(lRet != ERROR_SUCCESS)
  {
   ::RegCloseKey(hKEY);
   return false;
  }

  ListLen = 0;
  DWORD dwPreLen = SubKeyLength;
  LPTSTR lpName;
  lpName = new TCHAR[SubKeyLength];
  memset(lpName, TCHAR('/0'), SubKeyLength);
  while( ::RegEnumKeyEx(hKEY, ListLen, lpName, &SubKeyLength, NULL, NULL, NULL, NULL) == ERROR_SUCCESS )
  {
   SubKeyLength = dwPreLen;
   ListLen++;
  }
  if(ListLen == 0)
  {
   ::RegCloseKey(hKEY);
   return false;
  }

  theKeysList = new LPCTSTR[ListLen];
  for(DWORD nCount=0; nCount<ListLen; nCount++)
  {
   SubKeyLength = dwPreLen;
   theKeysList[nCount] = new const TCHAR[SubKeyLength];
   memset((LPTSTR)theKeysList[nCount], TCHAR('/0'), SubKeyLength);
   lRet = ::RegEnumKeyEx(hKEY, nCount, (LPTSTR)theKeysList[nCount], &SubKeyLength, NULL, NULL, NULL, NULL);
   if(lRet != ERROR_SUCCESS)
   {
    ::RegCloseKey(hKEY);
    return false;
   }
  }
  return true;
 }
 catch(...)
 {
  return false;
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值