桌面清理工具

发布时间:2024-12-17 04:34

桌面桌面清洁工具统一存放 #生活技巧# #居家生活技巧# #收纳整理建议# #桌面杂物清理#

桌面清理工具

最新推荐文章于 2021-05-04 06:41:46 发布

weixin_30591551 于 2012-10-22 23:46:00 发布

先看一下界面。

主界面如 :

 然后是被清理的桌面项的浏览:

接下来是配置不清理项:

本软件的主要工作原理是:

1)配置不清理项。

2)一键清理,被配置的不清理项不会被清理,会留在桌面上,其它文件会被移动到 ./DesktopFiles的目录下。

3)快速查看被清理的桌面项,提供搜索功能。

很简单。

其中要处理的细节,代码贴如下:

1.显示桌面时,程序界面不隐藏:

View Code

1)在 OnInitInstance (): CDesktopCleanDlg* pdlg = NULL; HWND hwnd = FindWindow (TEXT("Progman"), NULL); hwnd = ::GetWindow(hwnd, GW_CHILD); CWnd* pDesk = CWnd::FromHandle(hwnd); pdlg = new CDesktopCleanDlg (pDesk); pdlg->Create (CDesktopCleanDlg::IDD, pDesk); MSG msg; while (GetMessage (&msg, NULL, 0, 0)) { if (msg.message == WM_QUIT) { break; } else { TranslateMessage(&msg); DispatchMessage (&msg); } } pdlg->DestroyWindow(); delete pdlg; 采用非模态对话框进行构建。 2)在MainDlg里设置定时器,定时器内如下处理: if (!m_pwndDesktopShow->IsWindowVisible()) // ShowWindow(SW_SHOWNA);

2.根据文件首字进行自动划分其实所属类别,如“我”-W,“你”-N,“2”-E等等。(转载)

View Code

string CFileManager::WhichClass (const char* pszName) { if (pszName == NULL) { return ""; } static int li_SecPosValue[] = { 1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787, 3106, 3212, 3472, 3635, 3722, 3730, 3858, 4027, 4086, 4390, 4558, 4684, 4925, 5249 }; static char* lc_FirstLetter[] = { "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "W", "X", "Y", "Z" }; static char* ls_SecondSecTable = "CJWGNSPGCGNE[Y[BTYYZDXYKYGT[JNNJQMBSGZSCYJSYY[PGKBZGY[YWJKGKLJYWKPJQHY[W[DZLSGMRYPYWWCCKZNKYYGTTNJJNYKKZYTCJNMCYLQLYPYQFQRPZSLWBTGKJFYXJWZLTBNCXJJJJTXDTTSQZYCDXXHGCK[PHFFSS[YBGXLPPBYLL[HLXS[ZM[JHSOJNGHDZQYKLGJHSGQZHXQGKEZZWYSCSCJXYEYXADZPMDSSMZJZQJYZC[J[WQJBYZPXGZNZCPWHKXHQKMWFBPBYDTJZZKQHY" "LYGXFPTYJYYZPSZLFCHMQSHGMXXSXJ[[DCSBBQBEFSJYHXWGZKPYLQBGLDLCCTNMAYDDKSSNGYCSGXLYZAYBNPTSDKDYLHGYMYLCXPY[JNDQJWXQXFYYFJLEJPZRXCCQWQQSBNKYMGPLBMJRQCFLNYMYQMSQYRBCJTHZTQFRXQHXMJJCJLXQGJMSHZKBSWYEMYLTXFSYDSWLYCJQXSJNQBSCTYHBFTDCYZDJWYGHQFRXWCKQKXEBPTLPXJZSRMEBWHJLBJSLYYSMDXLCLQKXLHXJRZJMFQHXHWY" "WSBHTRXXGLHQHFNM[YKLDYXZPYLGG[MTCFPAJJZYLJTYANJGBJPLQGDZYQYAXBKYSECJSZNSLYZHSXLZCGHPXZHZNYTDSBCJKDLZAYFMYDLEBBGQYZKXGLDNDNYSKJSHDLYXBCGHXYPKDJMMZNGMMCLGWZSZXZJFZNMLZZTHCSYDBDLLSCDDNLKJYKJSYCJLKWHQASDKNHCSGANHDAASHTCPLCPQYBSDMPJLPZJOQLCDHJJYSPRCHN[NNLHLYYQYHWZPTCZGWWMZFFJQQQQYXACLBHKDJXDGMMY" "DJXZLLSYGXGKJRYWZWYCLZMSSJZLDBYD[FCXYHLXCHYZJQ[[QAGMNYXPFRKSSBJLYXYSYGLNSCMHZWWMNZJJLXXHCHSY[[TTXRYCYXBYHCSMXJSZNPWGPXXTAYBGAJCXLY[DCCWZOCWKCCSBNHCPDYZNFCYYTYCKXKYBSQKKYTQQXFCWCHCYKELZQBSQYJQCCLMTHSYWHMKTLKJLYCXWHEQQHTQH[PQ[QSCFYMNDMGBWHWLGSLLYSDLMLXPTHMJHWLJZYHZJXHTXJLHXRSWLWZJCBXMHZQXSDZP" "MGFCSGLSXYMJSHXPJXWMYQKSMYPLRTHBXFTPMHYXLCHLHLZYLXGSSSSTCLSLDCLRPBHZHXYYFHB[GDMYCNQQWLQHJJ[YWJZYEJJDHPBLQXTQKWHLCHQXAGTLXLJXMSL[HTZKZJECXJCJNMFBY[SFYWYBJZGNYSDZSQYRSLJPCLPWXSDWEJBJCBCNAYTWGMPAPCLYQPCLZXSBNMSGGFNZJJBZSFZYNDXHPLQKZCZWALSBCCJX[YZGWKYPSGXFZFCDKHJGXDLQFSGDSLQWZKXTMHSBGZMJZRGLYJB" "PMLMSXLZJQQHZYJCZYDJWBMYKLDDPMJEGXYHYLXHLQYQHKYCWCJMYYXNATJHYCCXZPCQLBZWWYTWBQCMLPMYRJCCCXFPZNZZLJPLXXYZTZLGDLDCKLYRZZGQTGJHHGJLJAXFGFJZSLCFDQZLCLGJDJCSNZLLJPJQDCCLCJXMYZFTSXGCGSBRZXJQQCTZHGYQTJQQLZXJYLYLBCYAMCSTYLPDJBYREGKLZYZHLYSZQLZNWCZCLLWJQJJJKDGJZOLBBZPPGLGHTGZXYGHZMYCNQSYCYHBHGXKAMTX" "YXNBSKYZZGJZLQJDFCJXDYGJQJJPMGWGJJJPKQSBGBMMCJSSCLPQPDXCDYYKY[CJDDYYGYWRHJRTGZNYQLDKLJSZZGZQZJGDYKSHPZMTLCPWNJAFYZDJCNMWESCYGLBTZCGMSSLLYXQSXSBSJSBBSGGHFJLYPMZJNLYYWDQSHZXTYYWHMZYHYWDBXBTLMSYYYFSXJC[DXXLHJHF[SXZQHFZMZCZTQCXZXRTTDJHNNYZQQMNQDMMG[YDXMJGDHCDYZBFFALLZTDLTFXMXQZDNGWQDBDCZJDXBZGS" "QQDDJCMBKZFFXMKDMDSYYSZCMLJDSYNSBRSKMKMPCKLGDBQTFZSWTFGGLYPLLJZHGJ[GYPZLTCSMCNBTJBQFKTHBYZGKPBBYMTDSSXTBNPDKLEYCJNYDDYKZDDHQHSDZSCTARLLTKZLGECLLKJLQJAQNBDKKGHPJTZQKSECSHALQFMMGJNLYJBBTMLYZXDCJPLDLPCQDHZYCBZSCZBZMSLJFLKRZJSNFRGJHXPDHYJYBZGDLQCSEZGXLBLGYXTWMABCHECMWYJYZLLJJYHLG[DJLSLYGKDZPZXJ" "YYZLWCXSZFGWYYDLYHCLJSCMBJHBLYZLYCBLYDPDQYSXQZBYTDKYXJY[CNRJMPDJGKLCLJBCTBJDDBBLBLCZQRPPXJCJLZCSHLTOLJNMDDDLNGKAQHQHJGYKHEZNMSHRP[QQJCHGMFPRXHJGDYCHGHLYRZQLCYQJNZSQTKQJYMSZSWLCFQQQXYFGGYPTQWLMCRNFKKFSYYLQBMQAMMMYXCTPSHCPTXXZZSMPHPSHMCLMLDQFYQXSZYYDYJZZHQPDSZGLSTJBCKBXYQZJSGPSXQZQZRQTBDKYXZK" "HHGFLBCSMDLDGDZDBLZYYCXNNCSYBZBFGLZZXSWMSCCMQNJQSBDQSJTXXMBLTXZCLZSHZCXRQJGJYLXZFJPHYMZQQYDFQJJLZZNZJCDGZYGCTXMZYSCTLKPHTXHTLBJXJLXSCDQXCBBTJFQZFSLTJBTKQBXXJJLJCHCZDBZJDCZJDCPRNPQCJPFCZLCLZXZDMXMPHJSGZGSZZQLYLWTJPFSYASMCJBTZKYCWMYTCSJJLJCQLWZMALBXYFBPNLSFHTGJWEJJXXGLLJSTGSHJQLZFKCGNNNSZFDEQ" "FHBSAQTGYLBXMMYGSZLDYDQMJJRGBJTKGDHGKBLQKBDMBYLXWCXYTTYBKMRTJZXQJBHLMHMJJZMQASLDCYXYQDLQCAFYWYXQHZ"; string result; int H, L, W; UINT i, stringlen = strlen(pszName); int j; for (i = 0; i < 1; i++) { H = (UCHAR) (pszName[i + 0]); L = (UCHAR) (pszName[i + 1]); if (H < 0xA1 || L < 0xA1) { result += pszName[i]; continue; } else { W = (H - 160) * 100 + L - 160; } if (W > 1600 && W < 5590) { for (j = 22; j >= 0; j--) { if (W >= li_SecPosValue[j]) { result += lc_FirstLetter[j]; i ++; break; } } continue; } else { i++; W = (H - 160 - 56) * 94 + L - 161; if (W >= 0 && W <= 3007) result += ls_SecondSecTable[W]; else { result += (char) H; result += (char) L; } } } for (int i = 0; i < result.length(); ++i) { switch (result [i]) { case '1': result [i] = 'Y'; break; case '2': result [i] = 'E'; break; case '3': case '4': result [i] = 'S'; break; case '5': result [i] = 'W'; break; case '0': case '6': result [i] = 'L'; break; case '7': result [i] = 'Q'; break; case '8': result [i] = 'B'; break; case '9': result [i] = 'J'; break; default: break; } result [i] = toupper(result [i]); } return result; }

3.获取桌面文件,注意,桌面文件比较特别,它有可能存在有不同用户的桌面文件,故不能用获取桌面文件夹的方式进行FindFirstFile, FindNextFile 进行文件枚举,这里采用COM枚举的方式(转载):

View Code

TCHAR MyDir[_MAX_PATH]; SHGetSpecialFolderPath(this->GetSafeHwnd(),MyDir,CSIDL_DESKTOP,0); TCHAR szExcept1 [MAX_PATH]; _stprintf (szExcept1, TEXT ("%s\\desktop.ini"), MyDir); m_lstCurr.SetImageList(&m_imgList, LVSIL_NORMAL); SHFILEINFO sfi; HICON hIcon; HRESULT hr; hr=CoInitialize(NULL); if (SUCCEEDED(hr)) { IMalloc *pMalloc; IShellFolder *pFolder; IEnumIDList *pEnumIDList; hr=SHGetMalloc(&pMalloc); hr=SHGetDesktopFolder(&pFolder); LPITEMIDLIST pIDList; hr=pFolder->EnumObjects (NULL,SHCONTF_STORAGE, &pEnumIDList); STRRET strBuf; LPTSTR pszName; HRESULT hrEnd; int i = 0; do { hrEnd=pEnumIDList->Next(1,&pIDList,NULL); hr=pFolder->GetDisplayNameOf(pIDList,SHGDN_FORPARSING,&strBuf); hr=StrRetToStr(&strBuf,pIDList,&pszName); if (_tcsicmp (pszName, szExcept1) != 0 && _tcsicmp (pszName, MyDir) != 0) { TCHAR* pszFileName = _tcsrchr (pszName, TEXT ('\\')); if (pszFileName == NULL) { pMalloc->Free (pszName); pMalloc->Free (pIDList); continue; } pszFileName += 1; if (!PathIsDirectory (pszName)) SHGetFileInfo(pszName,0,&sfi,sizeof(sfi),SHGFI_ICON|SHGFI_LARGEICON|SHGFI_USEFILEATTRIBUTES); else SHGetFileInfo(pszName,0,&sfi,sizeof(sfi),SHGFI_ICON|SHGFI_LARGEICON|SHGFI_SYSICONINDEX); hIcon = sfi.hIcon; m_imgList.Add (hIcon); //CString str (pszName); CStringA strA (pszName); char* pszText = new char [strA.GetLength() + 1]; strcpy(pszText, strA); LVITEM item; item.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_TEXT; item.cchTextMax = strA.GetLength() + 1; item.lParam = (LPARAM)pszText; item.iItem = i; item.iSubItem = 0; item.pszText = pszFileName; item.iImage = i; m_lstCurr.InsertItem (&item); ++i; } pMalloc->Free (pszName); pMalloc->Free (pIDList); }while(hrEnd == S_OK); pEnumIDList->Release (); pFolder->Release (); } CoUninitialize();

4.定位文件(夹)位置,我有博客写了这个算法,现在再贴一次吧。

View Code

#ifndef ExploreFileH #define ExploreFileH #include <Windows.h> #include <Shlobj.h> #ifdef UNICODE #define ExploreFile ExploreFileW #elif _UNICODE #define ExploreFile ExploreFileW #else #define ExploreFile ExploreFileA #endif BOOL ExploreFileW (const wchar_t* pwszFile) { LPITEMIDLIST pidl; LPCITEMIDLIST cpidl; IShellFolder* pDesktopFolder; ULONG ulEaten; DWORD dwAttributes; HRESULT hr; HKEY hKey; static wchar_t* s_pszSubKey = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion"; if (pwszFile == NULL) { return FALSE; } ulEaten = wcslen (pwszFile); if (FAILED (SHGetDesktopFolder (&pDesktopFolder))) { return FALSE; } if (pwszFile [0] != L'{') { hr = pDesktopFolder->ParseDisplayName ( NULL, 0, (LPOLESTR)pwszFile, &ulEaten, &pidl, &dwAttributes); } else { // CLSID DWORD dwProductIdLen = 256; wchar_t szProductId [256] = {0}; wchar_t szPathClsid [MAX_PATH] = {0}; // 获取本机CLSID if (ERROR_SUCCESS != RegOpenKeyExW (HKEY_LOCAL_MACHINE, s_pszSubKey, 0, KEY_READ, &hKey)) { pDesktopFolder->Release (); return FALSE; } DWORD dwType = REG_SZ; if (ERROR_SUCCESS != RegQueryValueExW (hKey, L"ProductId", 0, &dwType, (LPBYTE)szProductId, &dwProductIdLen)) { pDesktopFolder->Release (); RegCloseKey (hKey); return FALSE; } RegCloseKey (hKey); wsprintfW (szPathClsid, L"{%s}}\\::%s", szProductId, pwszFile); hr = pDesktopFolder->ParseDisplayName ( NULL, 0, (LPOLESTR)szPathClsid, &ulEaten, &pidl, &dwAttributes); } if (FAILED (hr)) { pDesktopFolder->Release (); return FALSE; } cpidl = pidl; CoInitialize (NULL); if (FAILED (SHOpenFolderAndSelectItems ( cpidl, 0, NULL, NULL))) { pDesktopFolder->Release (); CoUninitialize (); return FALSE; } pDesktopFolder->Release (); CoUninitialize (); return TRUE; } BOOL ExploreFileA (const char* pszFile) { wchar_t wszFile [MAX_PATH + 1] = {0}; if (!MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, pszFile, -1, wszFile, MAX_PATH)) { return FALSE; } return ExploreFileW (wszFile); } #endif // ExploreFileH

程序还有一些小BUG没有解决,如文件(夹)同名问题,它虽然不会覆盖,但我的程序无法区分。有时候配置不清理项时,会无法显示。后期再维护吧。

程序下载地址:http://files.cnblogs.com/lin1270/desktop_true.zip

如须程序代码,请留言。

转载于:https://www.cnblogs.com/lin1270/archive/2012/10/22/2734754.html

网址:桌面清理工具 https://www.yuejiaxmz.com/news/view/494176

相关内容

桌面清理工具下载
桌面清理工具精编版
桌面整理工具,windows桌面整理工具
【腾讯桌面整理工具】腾讯桌面整理工具
桌面清理工具精编版(桌面垃圾文件清理助手)V2.1 绿色版
桌面整理工具
小贝桌面整理工具
腾讯桌面整理工具
电脑桌面一团糟?4款桌面整理工具推荐
让桌面干干净净六款桌面管理工具

随便看看