DWORD WINAPI QueryRecycleBinThreadProc(void* pParam) { // NOTE: Do not use CRT functions (since thread was created with CreateThread())! SHQUERYRBINFO rbi = {0}; rbi.cbSize = sizeof(SHQUERYRBINFO); SHQueryRecycleBin(NULL, &rbi); g_BinCount = (double)rbi.i64NumItems; g_BinSize = (double)rbi.i64Size; EnterCriticalSection(&g_CriticalSection); HMODULE module = NULL; if (g_FreeInstanceInThread) { DWORD flags = GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT; GetModuleHandleEx(flags, (LPCWSTR)DllMain, &module); g_FreeInstanceInThread = false; } g_Thread = false; LeaveCriticalSection(&g_CriticalSection); if (module) { // Decrement the ref count and possibly unload the module if this is // the last instance. FreeLibraryAndExitThread(module, 0); } return 0; }
void CRecycleBinDlg::EndTime(int filecount) { bool tooSlow = false; if (((GetTickCount64() - m_startTicks)/1000) > (5UL+filecount)) tooSlow = true; if ((tooSlow)&&(DWORD(m_regDontDoAgain)==0)) { SHQUERYRBINFO SHQueryRBInfo = {sizeof(SHQUERYRBINFO)}; if (SHQueryRecycleBin(NULL, &SHQueryRBInfo)==S_OK) { if (SHQueryRBInfo.i64NumItems > 200) { m_sLabel.FormatMessage(IDS_RECYCLEBINSLOWDOWN, (unsigned long)filecount, (unsigned long)SHQueryRBInfo.i64NumItems); DoModal(); } } } }
//================================================================================================ //-----------------------------------------------------+++--> T-Clock Menu Command Message Handler: LRESULT OnTClockCommand(HWND hwnd, WPARAM wParam) //----------------------------------+++--> { WORD wID = LOWORD(wParam); switch(wID) { case IDM_REFRESHTCLOCK: RefreshUs(); break; case IDM_SHOWPROP: MyPropertySheet(-1); break; case IDM_PROP_ALARM: MyPropertySheet(1); break; case IDM_EXIT: SendMessage(hwnd,WM_CLOSE,0,0); break; case IDM_SHOWCALENDER: ToggleCalendar(1); // 1=own calendar break; case IDM_DISPLAYPROP: if(api.OS >= TOS_VISTA) api.Exec(L"::{26EE0668-A00A-44D7-9371-BEB064C98683}\\1\\::{C555438B-3C23-4769-A71F-B6D3D9B6053A}", NULL, NULL); else api.Exec(L"control", L"desk.cpl, display,1", NULL); break; case IDM_VOLUMECONTROL: //-------------------------------+++--> Volume Controls #ifndef _WIN64 # define OPEN_VOLUME L"SndVol32" #else # define OPEN_VOLUME L"SndVol" #endif // _WIN64 api.Exec(OPEN_VOLUME, NULL, NULL); break; case IDM_AUDIOPROP: //----------------------------------+++--> Audio settings / devices api.Exec(L"control", L"mmsys.cpl", NULL); break; case IDM_RECYCLEBIN: api.Exec(L"::{645FF040-5081-101B-9F08-00AA002F954E}", NULL, NULL); break; case IDM_RECYCLEBIN_PURGE:{ SHQUERYRBINFO info = {sizeof(info)}; // Windows seriously asks : SHQueryRecycleBin(NULL, &info); // "are you sure to delete all items" if(info.i64NumItems > 0 || api.OS == TOS_2000) // when the recycle bin is actually empty... SHEmptyRecycleBin(g_hwndTClockMain, NULL, 0); break;} case IDM_MAPDRIVE: //----------------------------------+++--> Map Network Drive WNetConnectionDialog(hwnd, RESOURCETYPE_DISK); break; case IDM_DISCONNECT: //-------------------------+++--> Disconnect Network Drive WNetDisconnectDialog(hwnd, RESOURCETYPE_DISK); break; case IDM_TOGGLE_DT: //---------------------------+++--> Show / Hide the Desktop ToggleDesk(); break; case IDM_QUICKY_WINEXP: { //-----------------//--+++--> Windows Explorer Opened api.Exec(L"Explorer", L"/e, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", hwnd); break;} case IDM_QUICKY_DOS: { // Command Prompt api.Exec(L"cmd", L"/f:on /t:0a", hwnd); break;} case IDM_QUICKY_EMPTYRB: SHEmptyRecycleBin(0, NULL, SHERB_NOCONFIRMATION); break; case IDM_SHUTDOWN: if(!ShutDown()) MessageBox(0, L"Shutdown Request Failed!", L"ERROR", MB_OK|MB_ICONERROR|MB_SETFOREGROUND); break; case IDM_REBOOT: if(!ReBoot()) MessageBox(0, L"Reboot Request Failed!", L"ERROR", MB_OK|MB_ICONERROR|MB_SETFOREGROUND); break; case IDM_LOGOFF: if(!LogOff()) MessageBox(0, L"Logoff Request Failed!", L"ERROR", MB_OK|MB_ICONERROR|MB_SETFOREGROUND); break; case IDM_FWD_CASCADE: case IDM_FWD_SIDEBYSIDE: case IDM_FWD_STACKED: case IDM_FWD_SHOWDESKTOP: case IDM_FWD_MINALL: case IDM_FWD_UNDO: g_undo=(wID!=IDM_FWD_UNDO); /* fall through */ case IDM_FWD_DATETIME: case IDM_FWD_CUSTOMNOTIFYICONS: case IDM_FWD_TASKMAN: case IDM_FWD_LOCKTASKBAR: case IDM_FWD_LOCKALLTASKBAR: case IDM_FWD_TASKBARPROP: case IDM_FWD_RUNAPP: case IDM_FWD_EXITEXPLORER:{ HWND hwndTray = FindWindowA("Shell_TrayWnd", NULL); if(hwndTray) PostMessage(hwndTray, WM_COMMAND, wID, 0); break;} case IDM_DATETIME_EX:{ HWND hwnd1, hwnd2; int wait = 40; api.Exec(L"timedate.cpl", L"", 0); while((hwnd2=FindWindowA((char*)(uintptr_t)32770,"Date and Time"))==0 && wait--) Sleep(50); if(hwnd2){ SetActiveWindow(hwnd2); wait = 10; while((hwnd1=FindWindowExA(hwnd2,NULL,(char*)(uintptr_t)32770,"Date and Time"))==0 && wait--) Sleep(50); if(hwnd1){ hwnd2 = GetDlgItem(hwnd1,116); if(hwnd2) PostMessage(hwnd2,BM_CLICK,0,0); } } break;} case IDM_CHIME: /// Alarms AlarmChimeEnable(-1); break; case IDM_STOPWATCH: /// Timers DialogStopWatch(); break; case IDM_STOPWATCH_START: case IDM_STOPWATCH_RESUME: if(!IsWindow(g_hDlgStopWatch)) DialogStopWatch(); StopWatch_Resume(g_hDlgStopWatch); break; case IDM_STOPWATCH_STOP: case IDM_STOPWATCH_PAUSE: if(IsWindow(g_hDlgStopWatch)) StopWatch_Pause(g_hDlgStopWatch); break; case IDM_STOPWATCH_RESET: if(IsWindow(g_hDlgStopWatch)) StopWatch_Reset(g_hDlgStopWatch); break; case IDM_STOPWATCH_LAP: if(IsWindow(g_hDlgStopWatch)) StopWatch_Lap(g_hDlgStopWatch,0); break; case IDM_TIMER: DialogTimer(0); break; case IDM_TIMEWATCH: WatchTimer(0); // Shelter All the Homeless Timers. break; case IDM_TIMEWATCHRESET: WatchTimer(1); // Shelter All the Homeless Timers. break; case IDM_SNTP:{ short just_elevated = HIWORD(wParam); if(!just_elevated || HaveSetTimePermissions()) { ReplyMessage(1); NetTimeConfigDialog(0); return 1; // handled } else { if(IsWindow(g_hDlgSNTP)) SendMessage(g_hDlgSNTP, WM_CLOSE, 1, 0); // close window but safe changes } return 0;} case IDM_SYNCTIME: case IDM_SNTP_SYNC:{ short just_elevated = HIWORD(wParam); int can_sync = HaveSetTimePermissions(); if(!just_elevated || can_sync) { ReplyMessage(1); if(can_sync) { SyncTimeNow(); } else { if(api.ExecElevated(GetClockExe(),L"/UAC /Sync",NULL) != 0) { MessageBox(0, L"T-Clock must be elevated to set your system time,\nbut elevation was canceled", L"Time Sync Failed", MB_OK|MB_ICONERROR|MB_SETFOREGROUND); } } return 1; // handled } return 0;} default: #ifdef _DEBUG DBGOUT("%s: unknown ID: %.5i(0x%.4x) (hwnd:%p)", __FUNCTION__, wID, wID, hwnd); #endif // _DEBUG break; } return 0; }
void CRecBinViewer::InstallShellNotify () { SHChangeNotifyEntry stPIDL; LPITEMIDLIST ppidl; int iPos = 0; TCHAR szPath[MAX_PATH]; WIN32_FIND_DATA findData; HANDLE hFindData = INVALID_HANDLE_VALUE; HRESULT hr = S_OK; CDriveArray ar; GetDrives (ar); for (unsigned int i = 0; i < ar.size (); i++) { if (ar[i].m_nType != DRIVE_FIXED) continue; SHQUERYRBINFO qrbi; ZeroMemory (&qrbi, sizeof (qrbi)); qrbi.cbSize = sizeof (qrbi); hr = SHQueryRecycleBin (ar[i].m_Path, &qrbi); if (SUCCEEDED (hr)) { ZeroMemory (&findData, sizeof (findData)); wsprintf (szPath, _T("%sRecycler"), static_cast<LPCWSTR>(ar[i].m_Path)); hFindData = FindFirstFile (szPath, &findData); if (INVALID_HANDLE_VALUE != hFindData) { ppidl = SHSimpleIDListFromPath (szPath); stPIDL.pidl = ppidl; m_pidlDrives[iPos] = ppidl; m_hNotifyDrives[iPos] = SHChangeNotifyRegister (m_hWnd, SHCNF_ACCEPT_INTERRUPTS | SHCNF_ACCEPT_NON_INTERRUPTS, SHCNE_RMDIR | SHCNE_RENAMEFOLDER | SHCNE_DELETE | SHCNE_RENAMEITEM, WM_SHELLNOTIFYRBINDIR, 1, &stPIDL); iPos ++; FindClose (hFindData); } else { ZeroMemory (&findData, sizeof (findData)); wsprintf (szPath, _T("%sRecycled"), static_cast<LPCWSTR>(ar[i].m_Path)); hFindData = FindFirstFile (szPath, &findData); if (INVALID_HANDLE_VALUE != hFindData) { ppidl = SHSimpleIDListFromPath (szPath); stPIDL.pidl = ppidl; m_pidlDrives[iPos] = ppidl; m_hNotifyDrives[iPos] = SHChangeNotifyRegister (m_hWnd, SHCNF_ACCEPT_INTERRUPTS | SHCNF_ACCEPT_NON_INTERRUPTS, SHCNE_RMDIR | SHCNE_RENAMEFOLDER | SHCNE_DELETE | SHCNE_RENAMEITEM, WM_SHELLNOTIFYRBINDIR, 1, &stPIDL); iPos ++; FindClose (hFindData); } } } } }
void KTrashOnekeyTask::RunCleanFile() { CString strDirectory = _T(""); int nCleanCount = 0; ULONGLONG delTotalSize = 0; for (size_t i = 0; i < m_DirWorks.size() && !g_bStop[1]; i++) { if (TaskDesc.size() > i) { strDesc = TaskDesc.at(i); } m_nCurrentIndex = (int)i; DIRECTORYWORK& dirwork = m_DirWorks[i]; if (dirwork.bDefaultSelect) { BOOL bRunning = IsItemProcessRunning(dirwork.id); if (bRunning) { continue; } nCleanCount++; std::vector<CString>::iterator iter = dirwork.strDirectory.begin(); if (dirwork.strFriendName == L"»ØÊÕÕ¾") { SHQUERYRBINFO syscleInfo = { 0 }; syscleInfo.cbSize = sizeof(SHQUERYRBINFO); int iCount = SHQueryRecycleBin(NULL, &syscleInfo); if (syscleInfo.i64NumItems != 0) { SHEmptyRecycleBin(NULL, NULL, SHERB_NOCONFIRMATION | SHERB_NOPROGRESSUI | SHERB_NOSOUND); m_pCallBack->OnCleanEntry((int)strDesc.size(),strDesc.c_str(),(int)strDesc.size(),strDesc.c_str(), (double)syscleInfo.i64Size / ((1024) * (1024))); } delTotalSize += syscleInfo.i64NumItems; } for (; iter != dirwork.strDirectory.end(); iter++) { strDirectory = *iter; if (strDirectory.GetLength() <= 0) continue; BOOL bFilter = FALSE; for (size_t ivIndex = 0; ivIndex < dirwork.strFilt.size(); ivIndex++) { if (CFilterTool::Instance()._DoFindFuncMap(dirwork.strFilt.at(ivIndex),strDirectory)) { bFilter = TRUE; break; } } if (bFilter) { continue; } if (strDirectory[strDirectory.GetLength() - 1] != _T('\\')) strDirectory += _T('\\'); m_pCallBack->OnCleanEntry( (int)strDesc.size(),strDesc.c_str(), 0, NULL, (double)m_ulTotalJunkFileSize / ((1024) * (1024)) ); DeleteFileInDirectory( strDirectory, dirwork.strExtArray, dirwork.bRecursive ? 15 : 0, 1, &m_FileListData, m_nCurrentIndex, m_pCallBack, &DelFile, strDesc, dirwork.strFilt ); } } } m_pCallBack->OnEnd(); if (nCleanCount > 0) { REMOVE_EXAM_RESULT_ITEM RemoveItemInfo; RemoveItemInfo.uRemoveItem.RemoveItemInfo.Reset(); RemoveItemInfo.uRemoveItem.RemoveItemInfo.dwItemID = BkSafeExamItem::EXAM_TRASH; ::SendMessage(GetTrashNotifyHwnd(), MSG_APP_EXAM_SCORE_CHANGE, BkSafeExamItemExOperate::RemoveItem, (LPARAM)&RemoveItemInfo ); } delTotalSize += m_FileListData.m_nTotalsize; if (IsWindow(g_hWndKClear)) { LARGE_INTEGER llTemp; llTemp.QuadPart = delTotalSize; DWORD low = llTemp.LowPart; DWORD height = llTemp.HighPart; ::SendMessage(g_hWndKClear, WM_TRASH_ONEKEY_CLEAN, (WPARAM)height, (LPARAM)low); } nCleanCount = 0; }