//cleanDos2011.5.31.3.cpp
//win32控制台程序,界面做不出来
//没有严格测试过
#include <windows.h>
#include <stdio.h>
#include <string.h>
DWORD Total = 0; //文件和目录数量
DWORD dwFile = 0; //文件数量
DWORD dwFolder = 0; //所文件夹数量
DWORD dwDeleteFile = 0; //删除文件数量
//公共
VOID TimeDifference(SYSTEMTIME StOld, SYSTEMTIME StNow);//时差
VOID Show(VOID);
DWORD FindDirFile(LPSTR szPath); //遍历文件和目录
DWORD DeleteFileSuffix(LPSTR szPath, LPSTR Suffix);//删除特定后缀文件 //这有时删的干净,有时删不干净,本来是想删文件夹的,
DWORD DeleteDirFile(LPSTR szPath); //删除文件夹里的文件 //后面发现RemoveDirectory()只能删空文件夹,导致路径错误,就不要了.
VOID Clear0(DWORD *Total, DWORD *dwFile, DWORD *dwFolder, DWORD *dwDeleteFile);
VOID OS_Version(CHAR *szVersionInfo);
//1
VOID GetSystemDir(VOID); //获取系统位置
VOID SystemInfo(VOID); //获取系统信息
VOID GetTime(VOID); //获取时间
VOID SpaceSize(CHAR *RootPathName);
VOID PrintSpaceSize();
VOID AllSystemInfo(VOID);
//2
VOID DeleteRubbish(VOID); //删除垃圾文件
//3
VOID QQClean(VOID);//Win7 / XP
//VOID GetUserNameDocuments(LPSTR c);//获取用户名
//4
VOID StatisticsFile(VOID);//统计
VOID Conversion(CHAR* c); //格式转化
//5清理痕迹
VOID DeleteTrace(VOID);
VOID Show(VOID)
{
printf("\n1: 系统信息\t");
printf("2:垃圾清理\t");
printf("3: QQ还原\t\n");
printf("4: 统计文件\t");
printf("5: 清理痕迹\t");
printf("其他: 退出\n\n");
}
VOID GetSystemDir()
{
CHAR UserName[MAX_PATH];
DWORD dw = MAX_PATH;
GetUserName(UserName, &dw);
printf("用户名: %s\n", UserName);
CHAR SystemDir[MAX_PATH];
CHAR WindowDir[MAX_PATH];
GetSystemDirectory(SystemDir, MAX_PATH);
GetWindowsDirectory(WindowDir, MAX_PATH);
printf("系统目录:%s\nWindows目录:%s", SystemDir, WindowDir);
}
VOID SystemInfo()
{
SYSTEM_INFO SysInfo;
GetSystemInfo(&SysInfo);
printf("\n内存分页大小: 0x%.8X", SysInfo.dwPageSize);
printf("\n可用内存起始: 0x%.8x", SysInfo.lpMinimumApplicationAddress);
printf("\n可用内存结束: 0x%.8x", SysInfo.lpMaximumApplicationAddress);
printf("\nCPU个数: %d", SysInfo.dwNumberOfProcessors);
printf("\nCPU类型: ");
switch (SysInfo.dwProcessorType)
{
case PROCESSOR_INTEL_386:
printf("386\n");
break;
case PROCESSOR_INTEL_486:
printf("486\n");
break;
case PROCESSOR_INTEL_PENTIUM:
printf("pentium, Cpu Model 0x%.2X, Stepping 0x%.2X\n",(BYTE)(SysInfo.wProcessorRevision>>8), (BYTE)SysInfo.wProcessorRevision);
break;
case PROCESSOR_INTEL_IA64:
printf("IA64\n");
break;
case PROCESSOR_AMD_X8664:
printf("AMD x86 64\n");
break;
}
printf("处理器架构: ");
switch (SysInfo.wProcessorArchitecture)
{
case PROCESSOR_ARCHITECTURE_INTEL:
printf("intel");
printf(" CPU vendor is %d\n",SysInfo.wProcessorLevel);
break;
case PROCESSOR_ARCHITECTURE_IA64:
printf("64 bits intel\n");
break;
case PROCESSOR_ARCHITECTURE_AMD64:
printf("64 bits AMD\n");
break;
case PROCESSOR_ARCHITECTURE_UNKNOWN:
printf("UNKNOWN\n");
break;
}
}
VOID GetTime()
{
SYSTEMTIME st;
// 获取时间
GetLocalTime( &st );
printf("日期: %d-%d-%d\n", st.wYear, st.wMonth, st.wDay);
printf("时间: %d:%d:%d\n", st.wHour, st.wMinute, st.wSecond);
printf("已开机: %d分钟", GetTickCount()/1000/60);
}
VOID OS_Version(CHAR *szVersionInfo)
{
OSVERSIONINFO OS;
// 设置参数大小,调用并判断是否成功
OS.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if(!GetVersionEx(&OS))
{
printf("error %d\n",GetLastError());
return;
}
switch(OS.dwMajorVersion)
{
case 5:
switch(OS.dwMinorVersion)
{
case 0:
lstrcat(szVersionInfo,"2000");
break;
case 1:
lstrcat(szVersionInfo,"XP");
break;
case 2:
lstrcat(szVersionInfo,"Server 2003");
break;
}
break;
case 6:
switch(OS.dwMinorVersion)
{
case 0:
lstrcat(szVersionInfo,"Vista");
break;
case 1:
lstrcat(szVersionInfo,"7");
break;
}
break;
}
}
VOID SpaceSize(CHAR *RootPathName)
{
DWORD SectorsPerCluster;
DWORD BytesPerSector;
DWORD NumberOfFreeClusters;
DWORD TotalNumberOfClusters;
GetDiskFreeSpace(
RootPathName,
&SectorsPerCluster,
&BytesPerSector,
&NumberOfFreeClusters,
&TotalNumberOfClusters
);
// printf("%d, %d, %d\n", NumberOfFreeClusters, BytesPerSector, SectorsPerCluster);
DWORD64 FreeSpaceSize = (DWORD64)NumberOfFreeClusters * (DWORD64)BytesPerSector * (DWORD64)SectorsPerCluster;
if(FreeSpaceSize == 0)
{
return;
}
// printf("%I64d\n", FreeSpaceSize);
DWORD GB = FreeSpaceSize / ((DWORD64)1024 * (DWORD64)1024 * (DWORD64)1024);
FreeSpaceSize -= GB * ((DWORD64)1024 * (DWORD64)1024 * (DWORD64)1024);
DWORD MB = FreeSpaceSize / ((DWORD64)1024 * (DWORD64)1024);
FreeSpaceSize -= MB * ((DWORD64)1024 * (DWORD64)1024);
DWORD KB = FreeSpaceSize / 1024;
FreeSpaceSize -= KB * 1024;
DWORD B = FreeSpaceSize;
printf("%s 可用空间: %d GB %d MB %d KB %d B\n", RootPathName, GB, MB, KB, B);
DWORD64 TotalSpaceSize = (DWORD64)TotalNumberOfClusters * (DWORD64)BytesPerSector * (DWORD64)SectorsPerCluster;
// printf("%I64d\n", TotalSpaceSize);
GB = TotalSpaceSize / ((DWORD64)1024 * (DWORD64)1024 * (DWORD64)1024);
TotalSpaceSize -= GB * ((DWORD64)1024 * (DWORD64)1024 * (DWORD64)1024);
MB = TotalSpaceSize / ((DWORD64)1024 * (DWORD64)1024);
TotalSpaceSize -= MB * ((DWORD64)1024 * (DWORD64)1024);
KB = TotalSpaceSize / 1024;
TotalSpaceSize -= KB * 1024;
B = TotalSpaceSize;
printf("%s 总空间: %d GB %d MB %d KB %d B\n", RootPathName, GB, MB, KB, B);
}
VOID PrintSpaceSize()
{
CHAR DriverName[3] = "::";
for(
DWORD dwDriver = GetLogicalDrives(), dw = 1;
dwDriver != 0;
dwDriver /= 2, ++dw
)
{
if(dwDriver % 2 == 1)
{
switch(dw)
{
/* case 1:
DriverName[0] = 'A'; //在WIN7正常,XP时,会使SpacdSize()中的GetDiskFreeSpace()出错,因为一般没插A盘
SpaceSize(DriverName); //“A:”会中断,XP下默认A盘是3.5英寸软盘,GetLastError()返回21为设备未就绪
break;*/
case 2:
DriverName[0] = 'B';
SpaceSize(DriverName);
break;
case 3:
DriverName[0] = 'C';
SpaceSize(DriverName);
break;
case 4:
DriverName[0] = 'D';
SpaceSize(DriverName);
break;
case 5:
DriverName[0] = 'E';
SpaceSize(DriverName);
break;
case 6:
DriverName[0] = 'F';
SpaceSize(DriverName);
break;
case 7:
DriverName[0] = 'G';
SpaceSize(DriverName);
break;
case 8:
DriverName[0] = 'H';
SpaceSize(DriverName);
break;
case 9:
DriverName[0] = 'I';
SpaceSize(DriverName);
break;
case 10:
DriverName[0] = 'J';
SpaceSize(DriverName);
break;
}
}
}
}
VOID AllSystemInfo()
{
CHAR OS[24] = "Windows ";
OS_Version(OS);
printf("系统版本: %s\n",OS);
GetSystemDir();
SystemInfo();
PrintSpaceSize();
GetTime();
}
DWORD DeleteDirFile(LPSTR szPath)
{
CHAR szFilePath[MAX_PATH];
WIN32_FIND_DATA FindFileData;
HANDLE hListFile;
CHAR szFullPath[MAX_PATH];
//子目录和文件夹路径的字符串,用通配符“*”
lstrcpy(szFilePath, szPath);
lstrcat(szFilePath, "\\*");
//第一个文件和目录,获得句柄
hListFile = FindFirstFile(szFilePath,&FindFileData);
if(hListFile==INVALID_HANDLE_VALUE)
{
//错误 处理
switch(GetLastError())
{
case 3:
printf("\n路径错误\n");
break;
case 5:
printf("\n文件拒绝访问\n");
break;
case 21:
printf("\n设备未就绪\n");
break;
case 111:
printf("\n文件名太长\n");
break;
default:
printf("\n错误编号:%d\n", GetLastError());
}
return 1;
}
else
{
do
{
//“.”和“..”不遍历
if(lstrcmp(FindFileData.cFileName,TEXT("."))==0||
lstrcmp(FindFileData.cFileName,TEXT(".."))==0)
{
continue;
}
wsprintf(szFullPath,"%s\\%s",
szPath,FindFileData.cFileName);
printf("\n删除\t%s\t",szFullPath);
//目录 就进去
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
printf("---------------------目录");
DeleteDirFile(szFullPath);
// RemoveDirectory(szFullPath);
}
else
{
DeleteFile(szFullPath);
dwDeleteFile++;
}
}
while(FindNextFile(hListFile, &FindFileData));
}
return 0;
}
VOID TimeDifference(SYSTEMTIME StOld, SYSTEMTIME StNow)
{
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
if(StNow.wMilliseconds < StOld.wMilliseconds)
{
StNow.wSecond--;
StNow.wMilliseconds += 1000;
wMilliseconds = StNow.wMilliseconds - StOld.wMilliseconds;
}
else
{
wMilliseconds = StNow.wMilliseconds - StOld.wMilliseconds;
}
if(StNow.wSecond < StOld.wSecond)
{
StNow.wMinute--;
StNow.wSecond += 60;
wSecond = StNow.wSecond - StOld.wSecond;
}
else
{
wSecond = StNow.wSecond - StOld.wSecond;
}
if(StNow.wMinute < StOld.wMinute)
{
StNow.wMinute += 60;
wMinute = StNow.wMinute - StOld.wMinute;
}
else
{
wMinute = StNow.wMinute - StOld.wMinute;
}
// printf("\n花时 %d分 %d秒 %d微秒\n", wMinute, wSecond, wMilliseconds);
printf("\n花时");
if(wMinute != 0)
{
printf(" %d分", wMinute);
}
if(wSecond != 0)
{
printf(" %d秒", wSecond);
}
if(wMilliseconds != 0)
{
printf(" %d微秒\n", wMilliseconds);
}
}
DWORD DeleteFileSuffix(LPSTR szPath, LPSTR Suffix)
{
CHAR szFilePath[MAX_PATH];
WIN32_FIND_DATA FindFileData;
HANDLE hListFile;
CHAR szFullPath[MAX_PATH];
//子目录和文件夹路径的字符串,用通配符“*”
lstrcpy(szFilePath, szPath);
lstrcat(szFilePath, "\\*");
//第一个文件和目录,获得句柄
hListFile = FindFirstFile(szFilePath, &FindFileData);
if(hListFile == INVALID_HANDLE_VALUE)
{
//错误处理
switch(GetLastError())
{
case 3:
printf("\n路径错误\n");
break;
case 5:
printf("\n文件拒绝访问\n");
break;
case 21:
printf("\n设备未就绪\n");
break;
case 111:
printf("\n文件名太长\n");
break;
default:
printf("\n错误编号:%d\n", GetLastError());
}
return 1;
}
else
{
do
{
//“.”和“..”不遍历
if(lstrcmp(FindFileData.cFileName, TEXT(".")) == 0 || lstrcmp(FindFileData.cFileName, TEXT("..")) == 0)
{
continue;
}
wsprintf(szFullPath, "%s\\%s", szPath, FindFileData.cFileName);//路径
//如果是目录,则进入
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
DeleteFileSuffix(szFullPath, Suffix);
}
else
{
if(
szFullPath[strlen(szFullPath) - 1] == Suffix[2]
&&
szFullPath[strlen(szFullPath) - 2] == Suffix[1]
&&
szFullPath[strlen(szFullPath) - 3] == Suffix[0]
)
{
++dwDeleteFile;
printf("\n删除\t%s", szFullPath);
DeleteFile(szFullPath);
}
}
}
while(FindNextFile(hListFile, &FindFileData));
}
return 0;
}
VOID DeleteRubbish()
{
SYSTEMTIME StOld;
SYSTEMTIME StNow;
//垃圾文件后缀
CHAR TmpSuffix[4] = "tmp";
CHAR LogSuffix[4] = "log";
CHAR GidSuffix[4] = "gid";
CHAR ChkSuffix[4] = "chk";
CHAR OldSuffix[4] = "old";
CHAR BakSuffix[4] = "bak";
//统计删除垃圾文件数
DWORD dwPrefetch = 0;
DWORD dwTmp = 0;
DWORD dwLog = 0;
DWORD dwGid = 0;
DWORD dwChk = 0;
DWORD dwOld = 0;
DWORD dwBak = 0;
//位置
//CHAR DeletePrefetch[MAX_PATH] = "C:\\Windows\\prefetch";
// //"D:\\a\\a";
//CHAR DeleteTemp[MAX_PATH] = "C:\\Windows\\Temp";
// //"D:\\a\\b";
//CHAR DeleteTmp[MAX_PATH] = "C:";
// //"D:\\a\\c";
//CHAR DeleteLog[MAX_PATH] = "C:";
// //"D:\\a\\c";
//CHAR DeleteGid[MAX_PATH] = "C:";
// //"D:\\a\\c";
//CHAR DeleteChk[MAX_PATH] = "C:";
// //"D:\\a\\c";
//CHAR DeleteOld[MAX_PATH] = "C:";
// //"D:\\a\\c";
//CHAR DeleteBak[MAX_PATH] = "C:\\Windows";
// //"D:\\a\\c";
CHAR DeletePrefetch[MAX_PATH];
GetWindowsDirectory(DeletePrefetch, MAX_PATH);
strcat(DeletePrefetch, "\\Prefetch");
CHAR DeleteTemp[MAX_PATH];
GetWindowsDirectory(DeleteTemp, MAX_PATH);
strcat(DeleteTemp, "\\Temp");
CHAR DeleteTmp[MAX_PATH];
GetWindowsDirectory(DeleteTmp, MAX_PATH);
DeleteTmp[3] = '\0';
CHAR DeleteLog[MAX_PATH];
GetWindowsDirectory(DeleteLog, MAX_PATH);
DeleteLog[3] = '\0';
CHAR DeleteGid[MAX_PATH];
GetWindowsDirectory(DeleteGid, MAX_PATH);
DeleteGid[3] = '\0';
CHAR DeleteChk[MAX_PATH];
GetWindowsDirectory(DeleteChk, MAX_PATH);
DeleteChk[3] = '\0';
CHAR DeleteOld[MAX_PATH];
GetWindowsDirectory(DeleteOld, MAX_PATH);
DeleteOld[3] = '\0';
CHAR DeleteBak[MAX_PATH];
GetWindowsDirectory(DeleteBak, MAX_PATH);
CHAR RootPathName[MAX_PATH];
GetWindowsDirectory(RootPathName, MAX_PATH);
RootPathName[2] = '\0';
DWORD SectorsPerCluster;
DWORD BytesPerSector;
DWORD NumberOfFreeClusters;
DWORD TotalNumberOfClusters;
GetDiskFreeSpace(
RootPathName,
&SectorsPerCluster,
&BytesPerSector,
&NumberOfFreeClusters,
&TotalNumberOfClusters
);
DWORD64 OldFreeSpaceSize = (DWORD64)NumberOfFreeClusters * (DWORD64)BytesPerSector * (DWORD64)SectorsPerCluster;
GetLocalTime(&StOld);
printf("预读取文件\t删除中");
DeleteDirFile(DeletePrefetch);
dwPrefetch = dwDeleteFile;
dwDeleteFile = 0;
printf("\n临时文件\t删除中");
DeleteFileSuffix(DeleteTmp, TmpSuffix);
DeleteDirFile(DeleteTemp);
dwTmp += dwDeleteFile;
dwDeleteFile = 0;
printf("\n日志文件\t删除中");
DeleteFileSuffix(DeleteLog, LogSuffix);
dwLog = dwDeleteFile;
dwDeleteFile = 0;
printf("\n索引文件\t删除中");
DeleteFileSuffix(DeleteGid, GidSuffix);
dwGid = dwDeleteFile;
dwDeleteFile = 0;
printf("\n文件碎片\t删除中");
DeleteFileSuffix(DeleteChk, ChkSuffix);
dwChk = dwDeleteFile;
dwDeleteFile = 0;
printf("\n过期文件\t删除中");
DeleteFileSuffix(DeleteOld, OldSuffix);
dwOld = dwDeleteFile;
dwDeleteFile = 0;
printf("\n备份文件\t删除中");
DeleteFileSuffix(DeleteBak, BakSuffix);
dwBak = dwDeleteFile;
dwDeleteFile = 0;
GetLocalTime(&StNow);
GetDiskFreeSpace(
RootPathName,
&SectorsPerCluster,
&BytesPerSector,
&NumberOfFreeClusters,
&TotalNumberOfClusters
);
DWORD64 NowFreeSpaceSize = (DWORD64)NumberOfFreeClusters * (DWORD64)BytesPerSector * (DWORD64)SectorsPerCluster;
DWORD64 DeleteSpaceSize = NowFreeSpaceSize - OldFreeSpaceSize;
DWORD GB = DeleteSpaceSize / ((DWORD64)1024 * (DWORD64)1024 * (DWORD64)1024);
DeleteSpaceSize -= GB * ((DWORD64)1024 * (DWORD64)1024 * (DWORD64)1024);
DWORD MB = DeleteSpaceSize / ((DWORD64)1024 * (DWORD64)1024);
DeleteSpaceSize -= MB * ((DWORD64)1024 * (DWORD64)1024);
DWORD KB = DeleteSpaceSize / 1024;
DeleteSpaceSize -= KB * 1024;
DWORD B = DeleteSpaceSize;
printf("\n完毕\n");
printf("删除 预读取文件\t%d\n", dwPrefetch);
printf("删除 临时文件\t%d\n", dwTmp);
printf("删除 日志文件\t%d\n", dwLog);
printf("删除 索引文件\t%d\n", dwGid);
printf("删除 文件碎片\t%d\n", dwChk);
printf("删除 过期文件\t%d\n", dwOld);
printf("删除 备份文件\t%d\n", dwBak);
// printf("删除 %d GB %d MB %d KB %d B 的垃圾文件", GB, MB, KB, B);
if(GB == 0 && MB == 0 && KB == 0 && B == 0)
{
printf("您的系统非常干净\n");
return;
}
printf("删除");
if(GB != 0)
{
if(GB < 0)
{
GB = -GB;
}
printf(" %d GB", GB);
}
if(MB != 0)
{
printf(" %d MB", MB);
}
if(KB != 0)
{
printf(" %d KB", KB);
}
if(B != 0)
{
printf(" %d B", B);
}
printf(" 的垃圾文件");
TimeDifference(StOld, StNow);
}
DWORD FindDirFile(LPSTR szPath)
{
CHAR szFilePath[MAX_PATH];
WIN32_FIND_DATA FindFileData;
HANDLE hListFile;
CHAR szFullPath[MAX_PATH];
//子目录和文件夹路径的字符串,用通配符“*”
lstrcpy(szFilePath, szPath);
lstrcat(szFilePath, "\\*");
//第一个文件和目录,获得句柄
hListFile = FindFirstFile(szFilePath, &FindFileData);
if(hListFile == INVALID_HANDLE_VALUE)
{
//错误处理
switch(GetLastError())
{
case 3:
printf("\n路径错误\n");
break;
case 5:
printf("\n文件拒绝访问\n");
break;
case 21:
printf("\n设备未就绪\n");
break;
case 111:
printf("\n文件名太长\n");
break;
default:
printf("\n错误编号:%d\n", GetLastError());
}
return 1;
}
else
{
do
{
//“.”和“..”不遍历
if(lstrcmp(FindFileData.cFileName, TEXT(".")) == 0 || lstrcmp(FindFileData.cFileName, TEXT("..")) == 0)
{
continue;
}
wsprintf(szFullPath, "%s\\%s", szPath, FindFileData.cFileName);//路径
Total++;
dwFile++;
printf("\n%d\t%s", Total, szFullPath);
//如果是目录,则进入
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
printf("--------------------------------目录");
dwFolder++;
dwFile--;
FindDirFile(szFullPath);
}
}
while(FindNextFile(hListFile, &FindFileData));
// while(0);//找到回收站
}
return 0;
}
//转化格式在\后面在加个\,eg:“\”→“\\”
VOID Conversion(CHAR* c)
{
for(int i = 0; i < strlen(c)+1; ++i)
{
if(c[i] == '\\')
{
for(int j = strlen(c)+1; j >= i ; --j)
{
c[j+1] = c[j];
}
c[strlen(c)+1] = '\0';
i += 2;
}
}
}
VOID StatisticsFile(VOID)
{
SYSTEMTIME StOld;
SYSTEMTIME StNow;
CHAR szCurrentPath[MAX_PATH];
printf("输入盘符或文件夹路径(例如 D: 或者 D:\\360safe )\n路径:");
scanf("%s", szCurrentPath);
Conversion(szCurrentPath);
GetLocalTime(&StOld);
FindDirFile(szCurrentPath);
GetLocalTime(&StNow);
printf("\n文件总数%d:\t", dwFile);
printf("文件夹总数%d:", dwFolder);
TimeDifference(StOld, StNow);
}
//VOID GetUserNameDocuments(LPSTR c)
//{
// CHAR Document[30] = "\\Documents\\Tencent Files";
// CHAR UserName[50];
// DWORD Size = MAX_PATH;
// GetUserName(UserName, &Size);
//// printf("%s\n", UserName);
// strcat(c, UserName);
// strcat(c, Document);
//}
VOID QQClean()
{
SYSTEMTIME StOld;
SYSTEMTIME StNow;
printf("QQ垃圾");
CHAR DeleteQQ[MAX_PATH];
GetWindowsDirectory(DeleteQQ, MAX_PATH);
DeleteQQ[3] = '\0';
//printf("%s\n", DeleteQQ);
OSVERSIONINFO OS;
OS.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&OS);
switch(OS.dwMajorVersion)
{
//XP
case 5:
strcat(DeleteQQ, "Documents and Settings\\");
break;
//Win7
case 6:
strcat(DeleteQQ, "Users\\");
break;
}
DWORD Size = MAX_PATH;
CHAR UserName[20];
GetUserName(UserName, &Size);
strcat(DeleteQQ, UserName);
switch(OS.dwMajorVersion)
{
//XP
case 5:
strcat(DeleteQQ, "\\My Documents\\Tencent Files");
break;
//Win7
case 6:
strcat(DeleteQQ, "\\Documents\\Tencent Files");
break;
}
GetLocalTime(&StOld);
DeleteDirFile(DeleteQQ);
GetLocalTime(&StNow);
// printf("\n共删除 %d QQ文件\n\n", dwDeleteFile);
printf("\n还原完毕\n");
TimeDifference(StOld, StNow);
}
VOID Clear0(DWORD *Total, DWORD *dwFile, DWORD *dwFolder, DWORD *dwDeleteFile)
{
*Total = 0;
*dwFile = 0;
*dwFolder = 0;
*dwDeleteFile = 0;
}
VOID DeleteTrace()
{
SYSTEMTIME StOld;
SYSTEMTIME StNow;
CHAR DeleteCookies[MAX_PATH];
CHAR DeleteHistory[MAX_PATH];
CHAR UserName[MAX_PATH];
DWORD Size = MAX_PATH;
GetUserName(UserName, &Size);
printf("清理痕迹\n");
GetLocalTime(&StOld);
GetWindowsDirectory(DeleteCookies, MAX_PATH);
DeleteCookies[3] = '\0';
GetWindowsDirectory(DeleteHistory, MAX_PATH);
DeleteHistory[3] = '\0';
OSVERSIONINFO OS;
OS.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&OS);
switch(OS.dwMajorVersion)
{
//XP
case 5:
strcat(DeleteCookies, "Documents and Settings\\");
strcat(DeleteHistory, "Documents and Settings\\");
strcat(DeleteCookies, UserName);
strcat(DeleteHistory, UserName);
strcat(DeleteCookies, "\\Local Settings\\Temporary Internet Files");
strcat(DeleteHistory, "\\Local Settings\\History\\History.IE5");
DeleteDirFile(DeleteCookies);
DeleteDirFile(DeleteHistory);
break;
//Win7
case 6:
strcat(DeleteCookies, "Users\\");
strcat(DeleteCookies, UserName);
strcat(DeleteCookies, "\\AppData\\Roaming\\Microsoft\\Windows\\Cookies");
DeleteDirFile(DeleteCookies);
break;
}
GetLocalTime(&StNow);
TimeDifference(StOld, StNow);
}
int main()
{
while(1)
{
Show();
int i;
scanf("%d", &i);
switch(i)
{
case 1:
AllSystemInfo();
Clear0(&Total, &dwFile, &dwFolder, &dwDeleteFile);
break;
case 2:
DeleteRubbish();
Clear0(&Total, &dwFile, &dwFolder, &dwDeleteFile);
break;
case 3:
QQClean();
Clear0(&Total, &dwFile, &dwFolder, &dwDeleteFile);
break;
case 4:
StatisticsFile();
Clear0(&Total, &dwFile, &dwFolder, &dwDeleteFile);
break;
case 5:
DeleteTrace();
Clear0(&Total, &dwFile, &dwFolder, &dwDeleteFile);
break;
default:
return 0;
}
}
}