VC中实现历史记录的全面清除
来源:互联网 发布:linux c tcp服务器 编辑:程序博客网 时间:2024/05/29 18:03
清除历史记录的文章很多,但是一般都不够全面。作者经过整理和收集一些资料,加以融合。得到了一个较全面的历史记录清除方法。
前言:
在本人用完计算机之后,往往不希望别人发现你做过什么,和浏览过什么网址。(特别是和多人共用一台机子时)。当然,你可以手工清理那些记录。 但那是多么繁杂的一件事啊。 我想没人愿意那样做。于是,我想到用一个软件来一次性完成上述工作。
清除历史记录的文章很多,但是一般都不够全面。本人经过整理和收集一些资料,加以融合。得到了一个较全面的历史记录清除方法。
在这里要指出代码能完成,要特别感谢朋友 xzhang左图便是本文例子程序的运行效果图,我们可以从中看到该例子具体能实现的清除内容。
大小:17K
下面我们通过代码看看具体是如何实现的。
首先: 在 stdafx.h中要加入: #include "atlbase.h"
设置->Link 要引入库 : Wininet.lib shlwapi.lib
//在对话框的头文件中加入:
01.
#include "wininet.h"
02.
#include "UrlHist.h"
03.
04.
#define SWEEP_BUFFER_SIZE 10000
05.
06.
public
:
07.
08.
enum
DEL_CACHE_TYPE
//要删除的类型。
09.
{
10.
File,
//表示internet临时文件
11.
Cookie
//表示Cookie
12.
};
//以下为一些辅助函数 ( 辅助函数的具体实现参见源代码中.限于篇幅不再给出 )
01.
BOOL
DeleteUrlCache(DEL_CACHE_TYPE type);
02.
BOOL
EmptyDirectory(
LPCTSTR
szPath,
BOOL
bDeleteDesktopIni = FALSE,
BOOL
bWipeIndexDat = FALSE);
//清空一个目录
03.
BOOL
IsWindowsNT();
//判断系统
04.
BOOL
IsWindows2k();
05.
BOOL
GetUserSid(PSID* ppSid);
06.
void
GetSidString(PSID pSid,
LPTSTR
szBuffer);
07.
BOOL
GetOldSD(
HKEY
hKey,
LPCTSTR
pszSubKey,
BYTE
** pSD);
08.
BOOL
CreateNewSD(PSID pSid, SECURITY_DESCRIPTOR* pSD, PACL* ppDacl);
09.
BOOL
RegSetPrivilege(
HKEY
hKey,
LPCTSTR
pszSubKey, SECURITY_DESCRIPTOR* pSD,
BOOL
bRecursive);
10.
BOOL
WipeFile(
LPCTSTR
szDir,
LPCTSTR
szFile);
//现在我们可以分别实现每项清除功能。
1、清除IE临时文件
1.
TCHAR
szPath[MAX_PATH];
2.
DeleteUrlCache(File);
3.
if
(SHGetSpecialFolderPath(NULL, szPath, CSIDL_INTERNET_CACHE, FALSE))
4.
{
//得到临时目录,并清空它.
5.
EmptyDirectory(szPath);
6.
}
清除IE临时文件的另外一个途径是直接调用Wininet函数,请看下面用于清除IE临时文件的函数
01.
BOOL
DelTempFiles()
02.
{
03.
BOOL
bResult = FALSE;
04.
BOOL
bDone = FALSE;
05.
LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry = NULL;
06.
07.
DWORD
dwTrySize, dwEntrySize = 4096;
// start buffer size
08.
HANDLE
hCacheDir = NULL;
09.
DWORD
dwError = ERROR_INSUFFICIENT_BUFFER;
10.
11.
do
12.
{
13.
switch
(dwError)
14.
{
15.
// need a bigger buffer
16.
case
ERROR_INSUFFICIENT_BUFFER:
17.
delete
[] lpCacheEntry;
18.
lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO)
new
char
[dwEntrySize];
19.
lpCacheEntry->dwStructSize = dwEntrySize;
20.
dwTrySize = dwEntrySize;
21.
BOOL
bSuccess;
22.
if
(hCacheDir == NULL)
23.
24.
bSuccess = (hCacheDir
25.
= FindFirstUrlCacheEntry(NULL, lpCacheEntry,
26.
&dwTrySize)) != NULL;
27.
else
28.
bSuccess = FindNextUrlCacheEntry(hCacheDir, lpCacheEntry, &dwTrySize);
29.
30.
if
(bSuccess)
31.
dwError = ERROR_SUCCESS;
32.
else
33.
{
34.
dwError = GetLastError();
35.
dwEntrySize = dwTrySize;
// use new size returned
36.
}
37.
break
;
38.
39.
// we are done
40.
case
ERROR_NO_MORE_ITEMS:
41.
bDone = TRUE;
42.
bResult = TRUE;
43.
break
;
44.
45.
// we have got an entry
46.
case
ERROR_SUCCESS:
47.
48.
// don''''''''''''''''t delete cookie entry
49.
if
(!(lpCacheEntry->CacheEntryType & COOKIE_CACHE_ENTRY))
50.
51.
DeleteUrlCacheEntry(lpCacheEntry->lpszSourceUrlName);
52.
53.
// get ready for next entry
54.
dwTrySize = dwEntrySize;
55.
if
(FindNextUrlCacheEntry(hCacheDir, lpCacheEntry, &dwTrySize))
56.
dwError = ERROR_SUCCESS;
57.
58.
else
59.
{
60.
dwError = GetLastError();
61.
dwEntrySize = dwTrySize;
// use new size returned
62.
}
63.
break
;
64.
65.
// unknown error
66.
default
:
67.
bDone = TRUE;
68.
break
;
69.
}
70.
71.
if
(bDone)
72.
{
73.
delete
[] lpCacheEntry;
74.
if
(hCacheDir)
75.
FindCloseUrlCache(hCacheDir);
76.
77.
}
78.
}
while
(!bDone);
79.
return
bResult;
80.
}
2、Cookie的清除
1.
TCHAR
szPath[MAX_PATH];
2.
DeleteUrlCache(Cookie);
3.
if
(SHGetSpecialFolderPath(NULL, szPath, CSIDL_COOKIES, FALSE))
4.
{
//得到目录,并清空
5.
EmptyDirectory(szPath);
6.
}
3、浏览器地址栏历史地址的清除
1.
SHDeleteKey(HKEY_CURRENT_USER,
2.
_T(
"Software\\Microsoft\\Internet Explorer\\TypedURLs"
));
4、清除表单自动完成历史记录
01.
CString sKey;
02.
DWORD
dwRet;
03.
04.
if
(IsWindows2k() || IsWindowsNT())
//先判断系统
05.
{
06.
CString sBaseKey;
07.
SECURITY_DESCRIPTOR NewSD;
08.
BYTE
* pOldSD;
09.
PACL pDacl = NULL;
10.
PSID pSid = NULL;
11.
TCHAR
szSid[256];
12.
if
(GetUserSid(&pSid))
13.
{
14.
//get the hiden key name
15.
GetSidString(pSid, szSid);
16.
17.
sKey = _T(
"Software\\Microsoft\\Protected Storage System Provider\\"
);
18.
sKey += szSid;
19.
20.
//get old SD
21.
sBaseKey = sKey;
22.
GetOldSD(HKEY_CURRENT_USER, sBaseKey, &pOldSD);
23.
24.
//set new SD and then clear
25.
if
(CreateNewSD(pSid, &NewSD, &pDacl))
26.
{
27.
RegSetPrivilege(HKEY_CURRENT_USER, sKey, &NewSD, FALSE);
28.
29.
sKey += _T(
"\\Data"
);
30.
RegSetPrivilege(HKEY_CURRENT_USER, sKey, &NewSD, FALSE);
31.
32.
sKey += _T(
"\\e161255a-37c3-11d2-bcaa-00c04fd929db"
);
33.
RegSetPrivilege(HKEY_CURRENT_USER, sKey, &NewSD, TRUE);
34.
35.
dwRet = SHDeleteKey(HKEY_CURRENT_USER, sKey);
36.
}
37.
38.
if
(pDacl != NULL)
39.
HeapFree(GetProcessHeap(), 0, pDacl);
40.
41.
//restore old SD
42.
if
(pOldSD)
43.
{
44.
RegSetPrivilege(HKEY_CURRENT_USER, sBaseKey,
45.
(SECURITY_DESCRIPTOR*)pOldSD, FALSE);
46.
delete
pOldSD;
47.
}
48.
}
49.
if
(pSid)
50.
HeapFree(GetProcessHeap(), 0, pSid);
51.
}
52.
53.
//win9x
54.
DWORD
dwSize = MAX_PATH;
55.
TCHAR
szUserName[MAX_PATH];
56.
GetUserName(szUserName, &dwSize);
57.
58.
sKey = _T(
"Software\\Microsoft\\Protected Storage System Provider\\"
);
59.
sKey += szUserName;
60.
sKey += _T(
"\\Data\\e161255a-37c3-11d2-bcaa-00c04fd929db"
);
61.
dwRet = SHDeleteKey(HKEY_LOCAL_MACHINE, sKey);
5、清除自动密码历史记录
1.
SHDeleteKey(HKEY_CURRENT_USER,
2.
_T(
"Software\\Microsoft\\Internet Explorer\\IntelliForms"
));
6、清收藏夹中的内容
1.
TCHAR
szPath[MAX_PATH];
2.
if
(SHGetSpecialFolderPath(NULL, szPath, CSIDL_FAVORITES, FALSE))
3.
{
//得到目录,并清空
4.
EmptyDirectory(szPath);
5.
}
7、清RAS自动拨号历史记录
1.
SHDeleteKey(HKEY_CURRENT_USER,
2.
_T(
"Software\\Microsoft\\RAS Autodial\\Addresses"
));
8、清系统临时文件夹
1.
TCHAR
szPath[MAX_PATH];
2.
if
(GetTempPath(MAX_PATH, szPath))
//得到系统临时目录
3.
{
4.
EmptyDirectory(szPath, TRUE);
5.
}
9、清空回收站
1.
SHEmptyRecycleBin(NULL, NULL,
2.
3.
SHERB_NOCONFIRMATION | SHERB_NOPROGRESSUI | SHERB_NOSOUND);
10、清除"运行"中的自动匹配历史记录
1.
SHDeleteKey(HKEY_CURRENT_USER,
2.
_T("Software\\Microsoft\\Windows\\
3.
CurrentVersion\\Explorer\\RunMRU"));
11、清"文档"中的历史记录
1.
TCHAR
szPath[MAX_PATH];
2.
if
(SHGetSpecialFolderPath(NULL, szPath, CSIDL_RECENT, FALSE))
3.
{
4.
EmptyDirectory(szPath);
5.
}
6.
SHDeleteKey(HKEY_CURRENT_USER,
7.
_T("Software\\Microsoft\\Windows\\CurrentVersion
8.
\\Explorer\\RecentDocs"));
12、清除上次登陆用户记录
01.
SHDeleteValue(HKEY_CURRENT_USER,
02.
_T("Software\\Microsoft\\Windows NT\\
03.
CurrentVersion\\Winlogon"),
04.
_T(
"DefaultUserName"
));
05.
SHDeleteValue(HKEY_CURRENT_USER,
06.
_T("Software\\Microsoft\\Windows NT\\
07.
CurrentVersion\\Winlogon"),
08.
_T(
"AltDefaultUserName"
));
09.
SHDeleteValue(HKEY_LOCAL_MACHINE,
10.
_T("Software\\Microsoft\\Windows\\
11.
CurrentVersion\\Winlogon"),
12.
_T(
"DefaultUserName"
));
13、清除"查找文件"自动匹配历史记录
01.
SHDeleteKey(HKEY_CURRENT_USER,
02.
_T("Software\\Microsoft\\Windows\\
03.
CurrentVersion\\Explorer\\Doc Find Spec
04.
MRU"));
05.
SHDeleteKey(HKEY_CURRENT_USER,
06.
_T("Software\\Microsoft\\Internet Explorer
07.
\\Explorer Bars\\{C4EE31F3-4768-11D2-BE5C-00A0C9A83DA1}
08.
\\ContainingTextMRU"));
09.
SHDeleteKey(HKEY_CURRENT_USER,
10.
_T("Software\\Microsoft\\Internet Explorer
11.
\\Explorer Bars\\{C4EE31F3-4768-11D2-BE5C-00A0C9A83DA1}
12.
\\FilesNamedMRU"));
14、清除"查找计算机"自动匹配历史记录
1.
SHDeleteKey(HKEY_CURRENT_USER,
2.
_T("Software\\Microsoft\\Windows\\CurrentVersion
3.
\\Explorer\\FindComputerMRU"));
4.
SHDeleteKey(HKEY_CURRENT_USER,
5.
_T("Software\\Microsoft\\Internet Explorer\\Explorer Bars
6.
\\{C4EE31F3-4768-11D2-BE5C-00A0C9A83DA1}
7.
\\ComputerNameMRU"));
15、清除网络联接历史记录
1.
TCHAR
szPath[MAX_PATH];
2.
if
(SHGetSpecialFolderPath(NULL, szPath, CSIDL_NETHOOD, FALSE))
3.
{
//得到目录,并清空
4.
EmptyDirectory(szPath);
5.
}
16、清远程登录历史记录
01.
CString sKey;
02.
for
(
int
i=1; i<=8; i++)
03.
{
04.
sKey.Format(_T(
"Machine%d"
), i);
05.
SHDeleteValue(HKEY_CURRENT_USER,
06.
_T(
"Software\\Microsoft\\Telnet"
), sKey);
07.
08.
sKey.Format(_T(
"Service%d"
), i);
09.
SHDeleteValue(HKEY_CURRENT_USER,
10.
_T(
"Software\\Microsoft\\Telnet"
), sKey);
11.
12.
sKey.Format(_T(
"TermType%d"
), i);
13.
SHDeleteValue(HKEY_CURRENT_USER,
14.
_T(
"Software\\Microsoft\\Telnet"
), sKey);
15.
}
16.
SHDeleteValue(HKEY_CURRENT_USER,
17.
_T(
"Software\\Microsoft\\Telnet"
), _T(
"LastMachine"
));
18.
SHDeleteValue(HKEY_CURRENT_USER,
19.
_T(
"Software\\Microsoft\\Telnet"
), _T(
"LastService"
));
20.
SHDeleteValue(HKEY_CURRENT_USER,
21.
_T(
"Software\\Microsoft\\Telnet"
), _T(
"LastTermType"
));
17、清浏览网址历史记录
下面这个函数可以用于清除网址历史记录
01.
#include "SHLGUID.H"
02.
HRESULT
ClearHistory()
03.
{
04.
HRESULT
hr;
05.
CoInitialize(NULL);
06.
{
07.
IUrlHistoryStg2* pUrlHistoryStg2 = NULL;
08.
hr= CoCreateInstance(CLSID_CUrlHistory,NULL,1, IID_IUrlHistoryStg2,(
void
**)&pUrlHistoryStg2);
09.
if
(SUCCEEDED(hr))
10.
{
11.
hr = pUrlHistoryStg2->ClearHistory();
12.
pUrlHistoryStg2->Release();
13.
}
14.
}
15.
CoUninitialize();
16.
return
hr;
17.
}
// 如果上面代码不能清
// 则有下面的,不完美,但能工作.
01.
TCHAR
szPath[MAX_PATH];
02.
GetWindowsDirectory(szPath, MAX_PATH);
03.
_tcscat(szPath, _T(
"\\History"
));
04.
EmptyDirectory(szPath, FALSE, TRUE);
05.
06.
if
(SHGetSpecialFolderPath(NULL, szPath, CSIDL_HISTORY, FALSE))
07.
{
08.
EmptyDirectory(szPath, FALSE, TRUE);
09.
}
- VC中实现历史记录的全面清除
- VC中实现历史记录的全面清除
- VC中实现历史记录的全面清除
- VC中实现历史记录的全面清除
- VC中实现历史记录的全面清除
- 清除eclipse中 Launch configuration的历史记录
- 清除eclipse中 Launch configuration的历史记录
- 清除eclipse中 Launch configuration的历史记录
- 清除eclipse中 Launch configuration的历史记录
- 清除eclipse中 Launch configuration的历史记录
- 清除eclipse中 Launch configuration的历史记录
- 清除myeclipse中 Launch configuration的历史记录
- 网页中历史记录的实现
- MyEclipse中webBrowser历史记录清除
- 清除MyEclipse中 Web Browser中的历史记录的方法
- 如何清除SQL Server 2008中登陆时的历史记录
- eclipse:清除eclipse中 Runnable JAR file 的历史记录
- 转:清除eclipse中 Launch configuration的历史记录
- (18)mysql中的分区(开发篇完)
- android中的action
- 2015年浙江省省赛赛后总结
- 基于s3c6410开发板helloworld驱动模块开发
- C Primer Plus 练习 10-2
- VC中实现历史记录的全面清除
- cg profiles,什么是profiles,以及如何使用CGC编译Cg语言
- Spring MVC视图解析器:Spring MVC ResourceBundleViewResolver示例
- 对象不能从 DBNull 转换为其他类型.
- CentOS上搭建Nginx + Mono 运行 asp.net
- python学习笔记1
- mybatis执行批量更新batch update 的方法(oracle,mysql)
- java垃圾回收机制
- HDU 1114 Piggy-Bank