程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 用VC清除浏覽痕跡

用VC清除浏覽痕跡

編輯:vc教程

上機浏覽,總要留下一些痕跡。手工一一清除,實在煩人。那麼,就讓我們用編程來一勞永逸地清除浏覽痕跡吧。

1.清除指定目錄下的文件
眾所周知,大多數的“垃圾”都放在指定的文件夾下,你只需刪除這些文件即可。

使用Windows API中的DeleteFile函數即可作到這一點。我們可以將它作成一個較完善的函數,用於刪除指定文件夾下的選定類型文件。函數擴充代碼如下:

void DelMyPointFile(LPSTR name,LPSTR CurrentPath)
{
//刪除指定路徑下的指定文件,支持通配符
//name:被刪除的文件;CurrentPath:找到的文件路徑
WIN32_FIND_DATA FileData;
HANDLE hSearch;
char szHome[MAX_PATH];
//char szFile[MAX_PATH];
DWord RightWrong;
//HDC MyDiaDC;
DWord NameLength;
//當前的程序路徑
RightWrong=GetCurrentDirectory(MAX_PATH,szHome);
RightWrong=SetCurrentDirectory(CurrentPath);
//保存程序執行路徑,然後,把當前路徑設定為需要查找的路徑
hSearch = FindFirstFile(name, &&FileData);
if (hSearch!= INVALID_HANDLE_VALUE)
{
NameLength=lstrlen(FileData.cFileName);
DeleteFile(FileData.cFileName);
while(FindNextFile(hSearch,&&FileData))
{
//找下一個文件,找到一個刪除一個
NameLength=lstrlen(FileData.cFileName);
DeleteFile(FileData.cFileName);
}
FindClose(hSearch);
//關閉查找句柄
}
RightWrong=SetCurrentDirectory(szHome);
}

有了這個函數,你就可以用以下代碼清除文檔選單、系統臨時目錄和IE臨時目錄。

char WindowRecentPath[]="\Recent";
char WindowTemp[]="\temp";
char WindowIETemp[]="\Temporary Internet Files";
char WindowCookie[]="\CookIEs";
char szWindowsPath[MAX_PATH];
char szDelPath[MAX_PATH];
...
GetWindowsDirectory(szWindowsPath,MAX_PATH);
lstrcpy(szDelPath,szWindowsPath);
lstrcat(szDelPath,WindowRecentPath);

//刪除window最近使用的文件列表
DelMyPointFile("*.*",szDelPath);
lstrcpy(szDelPath,szWindowsPath);
lstrcat(szDelPath,WindowTemp);
//刪除window臨時文件
DelMyPointFile("*.*",szDelPath);
lstrcpy(szDelPath,szWindowsPath);
lstrcat(szDelPath,WindowIETemp);
//刪除window IE臨時文件
DelMyPointFile("*.*",szDelPath);

2.“歷史記錄”的清除
IE的“歷史記錄”一直讓人頭疼不已,即使你把“歷史記錄”設定為零天同樣能保存當天的內容;嘗試用文件刪除,卻因為文件處於加載模式而此路不通;翻遍MSDN中也找不到可以利用的API。幸好IE自身的清除功能可以作到這一點。IE是一個典型的COM構件,我們可以通過調用它的組件模塊來直接清除“歷史記錄”。

HRESULT ClearHistory()
{
//建立IUrlHistoryStg2組件指針
IUrlHistoryStg2 * pUrlHistoryStg2=NULL;
//初始化COM庫
CoInitialize(NULL);
//建立客戶對象
HRESULT hr=CoCreateInstance(CLSID_CUrlHistory,NULL,CLSCTX_INPROC,IID_IUrlHistoryStg2,(void)&&pUrlHistoryStg2);
if(SUCCEEDED(hr))
{
//接口調用
hr=pUrlHistoryStg2->ClearHistory();
pUrlHistoryStg2->Release();
}
//關閉COM庫的聯接
CoUninitialize();
return hr;
}

3.清除下拉cache列表
IE的下拉cache列表隨時保存你浏覽過的網址,而以上的代碼卻不能清除它。Windows API中提供了FindNextUrlCacheEntry、DeleteUrlCacheEntry和FindFirstUrlCacheEntry三個函數用於清除,使用上略有點麻煩。而在Window 9X中有一個更加偷懶的辦法,即直接刪除注冊表。代碼如下:

void DelRegCache()
{
//刪除注冊表中保存的IE cache中的記錄
LPCSTR RootKey="HKEY_CURRENT_USER";
LPCSTR SubKey="Software\\Microsoft\\Internet Explorer\\TypedURLs";
RegDeleteKey(HKEY_CURRENT_USER,SubKey);
}
CookIE的刪除
Cookie保存在系統目錄的Cookies子目錄中,如果沒有打開IE,則可直接刪除。如果打開IE,由於它會保存一部分在內存中,你可以使用以下代碼刪除。
InternetSetOption(0, INTERNET_OPTION_END_BROWSER_SESSION, 0, 0);
lstrcpy(szDelPath,szWindowsPath);
lstrcat(szDelPath,WindowCookIE);
//刪除window IE臨時文件
DelMyPointFile("*.*",szDelPath);

以上代碼在VC++ 6.0、Windows 98下運行通過,可以滿足平時的大多數使用需要。然而,以上代碼中DelMyPointFile功能較為單一,只能刪除目錄下的文件,對於子目錄就無能為力了。有興趣的讀者可以自己編寫一個遞歸過程來完善它的功能。

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved