Как удалить свойство System.Size из моего пользовательского типа файла в Windows Explorer? - PullRequest
0 голосов
/ 24 апреля 2020

В последнее время я пытался получить гр asp в Windows Системе свойств. Я реализовал пользовательский тип файла (обработчик свойств, обработчик миниатюр, обработчик предварительного просмотра) и хочу скрыть свойство System.Size для моего типа файла в Windows Explorer (вкладка «Сведения» в диалоговом окне «Свойства» и столбец «Размер» в режиме просмотра сведений) .I использовал следующий код, но без результата. Можно ли скрыть свойство размера? Может быть, мне стоит написать расширение Shell Folder.

#include <shobjidl.h>
#include <propsys.h>
#include <propvarutil.h>
#include <propkey.h>
#include <strsafe.h>

#pragma comment(lib,"propsys.lib")

HRESULT SetPropertyValue(PCWSTR pszFilename, PCWSTR pszCanonicalName, PCWSTR pszValue)
{
    // Convert the Canonical name of the property to PROPERTYKEY
    PROPERTYKEY key;
    HRESULT hr = PSGetPropertyKeyFromName(pszCanonicalName, &key);
    if (SUCCEEDED(hr))
    {
        IPropertyStore* pps = NULL;

        hr = SHGetPropertyStoreFromParsingName(pszFilename, NULL, gpsFlags, IID_PPV_ARGS(ppps));
        if (SUCCEEDED(hr))
        {
           PROPVARIANT propvarValue = { 0 };
           hr = InitPropVariantFromString(pszValue, &propvarValue);
           if (SUCCEEDED(hr))
           {
               hr = PSCoerceToCanonicalValue(key, &propvarValue);
               if (SUCCEEDED(hr))
               {
                   // Set the value to the property store of the item.
                   hr = pps->SetValue(key, propvarValue);
                   if (SUCCEEDED(hr))
                   {
                       // Commit does the actual writing back to the file stream.
                       hr = pps->Commit();
                       if (SUCCEEDED(hr))
                       {
                           wprintf(L"Property %s value %s written successfully \n", pszCanonicalName, pszValue);
                       }
                       else
                       {
                           wprintf(L"Error %x: Commit to the propertystore failed.\n", hr);
                       }
                   }
                   else
                   {
                       wprintf(L"Error %x: Set value to the propertystore failed.\n", hr);
                   }
            }
            PropVariantClear(&propvarValue);
        }
        pps->Release();
    }
    else
    {
        wprintf(L"Error %x: getting the propertystore for the item.\n", hr);
    }
 }
 else
 {
    wprintf(L"Invalid property specified: %s\n", pszCanonicalName);
 }
 return hr;
 }



 int wmain(int argc, wchar_t* argv[])
 {
     if (SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)))
     {
         SetPropertyValue(L"FullFilePath",L"System.Size", L"0");

         CoUninitialize();
     }
     return 0;
}
...