C++写一个内存清理软件(三、内存清理)

37 篇文章 3 订阅
32 篇文章 0 订阅

一、界面

添加static、check、list、button
在这里插入图片描述

二、重绘

重绘控件,改变控件颜色
右键类向导,生成函数后加入以下代码
在这里插入图片描述
在这里插入图片描述

三、初始化

右键类向导,在生成函数中加入以下代码
在这里插入图片描述
在这里插入图片描述

四、交互

双击清理按钮,加入以下代码
在这里插入图片描述

五、清理

void CDlgDisk::ClearDisk(int num)
{
	LPINTERNET_CACHE_ENTRY_INFO pEntry = NULL;
	HANDLE hDir = NULL;
	HANDLE hTemp = NULL;
	unsigned long size = 4096;
	int i = 0;
	BOOL isEnd = FALSE;                     // 记录是否结束
	BOOL ret = TRUE;                        // 记录是否成功
	HKEY sub;
	DWORD val = 0x00000001;                 // 注册表键值
	CString skey;
	char buffer[128];                       // 保存系统目录路径
	CString syspath;                        // 保存临时文件夹路径
	switch (num) {                           // 判断清除的项目
	case 0:                             // 清空回收站
		GetWindowLong(m_hWnd, 0);
		SHEmptyRecycleBin(m_hWnd, NULL, SHERB_NOCONFIRMATION
			|| SHERB_NOPROGRESSUI
			|| SHERB_NOSOUND);
		break;
	case 1:                             // 清空Internet临时文件
		do {
			pEntry = (LPINTERNET_CACHE_ENTRY_INFO) new char[4096];
			pEntry->dwStructSize = 4096;
			if (hDir == NULL) {
				hDir = FindFirstUrlCacheEntry(NULL, pEntry, &size);
				if (hDir) {
					DeleteUrlCacheEntry(pEntry->lpszSourceUrlName);
				}
			}
			else {
				ret = FindNextUrlCacheEntry(hDir, pEntry, &size);
				if (ret) {
					DeleteUrlCacheEntry(pEntry->lpszSourceUrlName);
				}
			}
			if (ret) {
				while (ret) {
					ret = FindNextUrlCacheEntry(hDir, pEntry, &size);
					if (ret) {
						DeleteUrlCacheEntry(pEntry->lpszSourceUrlName);
					}
				}
			}
			else {
				isEnd = TRUE;
			}
			delete[]pEntry;
		} while (!isEnd);
		FindCloseUrlCache(hDir);
		break;
	case 2:                             // 清空Windows临时文件夹
		::GetSystemDirectory(buffer, 128);
		syspath = buffer;
		syspath.Replace("system32", "temp");
		DelFolder(syspath);
		RemoveDirectory(syspath);       // 目录为空时删除目录
		break;
	case 3:                             // 清空文件打开记录
	case 5:                             // 清空运行记录
		skey = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer";
		::RegCreateKey(HKEY_CURRENT_USER, skey, &sub);
		RegSetValueEx(sub, "ClearRecentDocsonExit", NULL, REG_BINARY, (BYTE*)&val, 4);
		::RegCloseKey(sub);
		break;
	case 4:                             // 清空IE地址栏中的记录
		skey = "Software\\Microsoft\\Internet Explorer\\TypedURLs";
		::RegDeleteKey(HKEY_CURRENT_USER, skey);
		break;
	}
}
void CDlgDisk::DelFolder(CString path)
{
	CFileFind file;
	if (path.Right(1) != "\\") {
		path += "\\*.*";
	}
	BOOL bf;
	bf = file.FindFile(path);                       // 查找文件
	while (bf) {
		bf = file.FindNextFile();                   // 查找下一个文件
		if (!file.IsDots() && !file.IsDirectory()) { // 是文件时直接删除
			DeleteFile(file.GetFilePath());         // 删除文件
		}
		else if (file.IsDots()) {
			continue;
		}
		else if (file.IsDirectory()) {
			path = file.GetFilePath();              // 获得目录路径
			// 是目录时,继续递归调用函数删除该目录下的文件
			DelFolder(path);
			RemoveDirectory(path);                  // 目录为空后删除目录
		}
	}
}

六、运行

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值