Коммит 2e8f4e2c создал по автору Mark Jansen's avatar Mark Jansen
Просмотр файлов

[SHELL32] Implement Recycle bin cleanup handler

CORE-18942
владелец f9bedd5c
......@@ -38,6 +38,7 @@ list(APPEND SOURCE
CDropTargetHelper.cpp
CEnumIDListBase.cpp
CExtractIcon.cpp
CRecycleBinCleaner.cpp
folders.cpp
iconcache.cpp
propsheet.cpp
......
/*
* PROJECT: shell32
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: CRecycleBinCleaner implementation
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
*/
#include "precomp.h"
WINE_DEFAULT_DEBUG_CHANNEL(shell);
CLSID CLSID_RecycleBinCleaner = { 0x5ef4af3a, 0xf726, 0x11d0, 0xb8, 0xa2, 0x00, 0xc0, 0x4f, 0xc3, 0x09, 0xa4 };
struct CRecycleBinCleaner :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CRecycleBinCleaner, &CLSID_RecycleBinCleaner>,
public IEmptyVolumeCache2
{
WCHAR m_wszVolume[4];
void
OutputResourceString(DWORD dwResId, _Out_ LPWSTR *ppwszOutput)
{
CStringW Tmp(MAKEINTRESOURCEW(dwResId));
SHStrDupW(Tmp, ppwszOutput);
}
public:
// +IEmptyVolumeCache
STDMETHODIMP Initialize(
_In_ HKEY hkRegKey,
_In_ LPCWSTR pcwszVolume,
_Out_ LPWSTR* ppwszDisplayName,
_Out_ LPWSTR* ppwszDescription,
_Out_ DWORD* pdwFlags)
{
if (!pdwFlags)
return E_POINTER;
*pdwFlags = EVCF_HASSETTINGS;
OutputResourceString(IDS_RECYCLE_CLEANER_DISPLAYNAME, ppwszDisplayName);
OutputResourceString(IDS_RECYCLE_CLEANER_DESCRIPTION, ppwszDescription);
return StringCchCopyW(m_wszVolume, _countof(m_wszVolume), pcwszVolume);
}
STDMETHODIMP GetSpaceUsed(
_Out_ DWORDLONG* pdwlSpaceUsed,
_In_opt_ IEmptyVolumeCacheCallBack* picb)
{
if (!pdwlSpaceUsed)
return E_POINTER;
SHQUERYRBINFO bin = { sizeof(bin) };
HRESULT hr = SHQueryRecycleBinW(m_wszVolume, &bin);
if (FAILED_UNEXPECTEDLY(hr))
{
bin.i64Size = 0;
}
*pdwlSpaceUsed = bin.i64Size;
if (picb)
{
picb->ScanProgress(bin.i64Size, EVCCBF_LASTNOTIFICATION, NULL);
}
return S_OK;
}
STDMETHODIMP Purge(
_In_ DWORDLONG dwlSpaceToFree,
_In_opt_ IEmptyVolumeCacheCallBack *picb)
{
DWORDLONG dwlPrevious = 0;
GetSpaceUsed(&dwlPrevious, NULL);
SHEmptyRecycleBinW(NULL, m_wszVolume, SHERB_NOCONFIRMATION | SHERB_NOPROGRESSUI | SHERB_NOSOUND);
if (picb)
{
picb->PurgeProgress(dwlPrevious, 0, EVCCBF_LASTNOTIFICATION, NULL);
}
return S_OK;
}
STDMETHODIMP ShowProperties(
_In_ HWND hwnd)
{
CComHeapPtr<ITEMIDLIST> pidl;
HRESULT hr;
if (FAILED_UNEXPECTEDLY(hr = SHGetSpecialFolderLocation(hwnd, CSIDL_BITBUCKET, &pidl)))
return hr;
SHELLEXECUTEINFOW seei = {sizeof(seei)};
seei.hwnd = hwnd;
seei.lpVerb = L"open";
seei.nShow = SW_SHOWNORMAL;
seei.fMask = SEE_MASK_IDLIST;
seei.lpIDList = pidl;
ShellExecuteExW(&seei);
return S_OK;
}
STDMETHODIMP Deactivate(
_Out_ DWORD* pdwFlags)
{
if (!pdwFlags)
return E_POINTER;
*pdwFlags = 0;
return S_OK;
}
// -IEmptyVolumeCache
// +IEmptyVolumeCache2
STDMETHODIMP InitializeEx(
_In_ HKEY hkRegKey,
_In_ LPCWSTR pcwszVolume,
_In_ LPCWSTR pcwszKeyName,
_Out_ LPWSTR* ppwszDisplayName,
_Out_ LPWSTR* ppwszDescription,
_Out_ LPWSTR* ppwszBtnText,
_Out_ DWORD* pdwFlags)
{
OutputResourceString(IDS_RECYCLE_CLEANER_BUTTON_TEXT, ppwszBtnText);
return Initialize(hkRegKey, pcwszVolume, ppwszDisplayName, ppwszDescription, pdwFlags);
}
// -IEmptyVolumeCache2
DECLARE_PROTECT_FINAL_CONSTRUCT();
DECLARE_REGISTRY_RESOURCEID(IDR_RECYCLEBINCLEANER)
DECLARE_NOT_AGGREGATABLE(CRecycleBinCleaner)
BEGIN_COM_MAP(CRecycleBinCleaner)
COM_INTERFACE_ENTRY_IID(IID_IEmptyVolumeCache2, IEmptyVolumeCache2)
COM_INTERFACE_ENTRY_IID(IID_IEmptyVolumeCache, IEmptyVolumeCache)
COM_INTERFACE_ENTRY_IID(IID_IUnknown, IUnknown)
END_COM_MAP()
};
OBJECT_ENTRY_AUTO(CLSID_RecycleBinCleaner, CRecycleBinCleaner)
......@@ -1000,6 +1000,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Обзор..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "Моят компютър"
IDS_TITLE_MYNET "Моята мрежа"
IDS_TITLE_BIN_1 "Кошче (пълно)"
......
......@@ -1000,6 +1000,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Browse..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "My Computer"
IDS_TITLE_MYNET "My Network Places"
IDS_TITLE_BIN_1 "Recycle Bin (full)"
......
......@@ -1008,6 +1008,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Procházet..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "Tento počítač"
IDS_TITLE_MYNET "Místa v síti"
IDS_TITLE_BIN_1 "Koš (plný)"
......
......@@ -1007,6 +1007,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Gennemse..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "Min Computer"
IDS_TITLE_MYNET "My Network Places"
IDS_TITLE_BIN_1 "Recycle Bin (full)"
......
......@@ -1001,6 +1001,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Durchsuchen..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "Arbeitsplatz"
IDS_TITLE_MYNET "Netzwerkumgebung"
IDS_TITLE_BIN_1 "Papierkorb (voll)"
......
......@@ -1000,6 +1000,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Αναζήτηση..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "Ο υπολογιστής μου"
IDS_TITLE_MYNET "My Network Places"
IDS_TITLE_BIN_1 "Κάδος ανακύκλωσης (γεμάτος)"
......
......@@ -1000,6 +1000,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Browse..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "My Computer"
IDS_TITLE_MYNET "My Network Places"
IDS_TITLE_BIN_1 "Recycle Bin (full)"
......
......@@ -1000,6 +1000,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Browse..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "My Computer"
IDS_TITLE_MYNET "My Network Places"
IDS_TITLE_BIN_1 "Recycle Bin (full)"
......
......@@ -1009,6 +1009,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Examinar..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "Mi equipo"
IDS_TITLE_MYNET "Mis sitios de red"
IDS_TITLE_BIN_1 "Papelera (llena)"
......
......@@ -1007,6 +1007,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Sirvi..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "Minu arvuti"
IDS_TITLE_MYNET "Minu võrgukohad"
IDS_TITLE_BIN_1 "Prügikast (täis)"
......
......@@ -1005,6 +1005,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Arakatu..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "Ordenagailua"
IDS_TITLE_MYNET "Nire sarelekuak"
IDS_TITLE_BIN_1 "Zakarrontzia (betea)"
......
......@@ -1000,6 +1000,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Selaa..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "Oma Tietokone"
IDS_TITLE_MYNET "My Network Places"
IDS_TITLE_BIN_1 "Recycle Bin (full)"
......
......@@ -1000,6 +1000,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Parcourir..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "Poste de travail"
IDS_TITLE_MYNET "Mon réseau"
IDS_TITLE_BIN_1 "Corbeille (pleine)"
......
......@@ -1008,6 +1008,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "עיון..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "המחשב שלי"
IDS_TITLE_MYNET "מיקומי הרשת שלי"
IDS_TITLE_BIN_1 "Recycle Bin (full)"
......
......@@ -1002,6 +1002,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "ब्राउज़ करें..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "मेरा कंप्यूटर"
IDS_TITLE_MYNET "मेरे नेटवर्क स्थान"
IDS_TITLE_BIN_1 "Recycle Bin (full)"
......
......@@ -999,6 +999,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Böngészés..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "Számítógép"
IDS_TITLE_MYNET "Hálózati helyek"
IDS_TITLE_BIN_1 "Lomtár (tele)"
......
......@@ -997,6 +997,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Jelajah..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "Komputer Saya"
IDS_TITLE_MYNET "Tempat Jaringan Saya"
IDS_TITLE_BIN_1 "Tampungan Daur Ulang (penuh)"
......
......@@ -1000,6 +1000,10 @@ BEGIN
IDS_SEARCH_BROWSEITEM "Esplora..."
IDS_RECYCLE_CLEANER_DISPLAYNAME "Recycle Bin"
IDS_RECYCLE_CLEANER_DESCRIPTION "The Recycle Bin contains files you have deleted from your computer. These files are not permanently removed until you empty the Recycle Bin."
IDS_RECYCLE_CLEANER_BUTTON_TEXT "&View Files"
IDS_TITLE_MYCOMP "Risorse del Computer"
IDS_TITLE_MYNET "Risorse di rete"
IDS_TITLE_BIN_1 "Cestino (pieno)"
......
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать