potisanのプログラミングメモ

プログラミング素人です。昔の自分を育ててくれたネット情報に少しでも貢献できるよう、情報を貯めていこうと思っています。Windows環境のC++やC#がメインです。

C++20&WIL ごみ箱のIShellItem取得

C++20とWILでごみ箱のIShellItemインターフェイスを取得するサンプルコードです。実行するとごみ箱の表示名を出力します。

#include <iostream>

#define STRICT
#define NOMINMAX
#include <Windows.h>
#include <ShlObj.h>

// Microsoft WIL 1.0.220201.1
#include "wil/com.h"

int main()
{
    std::wcout.imbue(std::locale("", std::locale::ctype));

    auto coinit{ wil::CoInitializeEx(COINIT_APARTMENTTHREADED) };

    wil::com_ptr<IShellItem> recycleBin;
    THROW_IF_FAILED(SHGetKnownFolderItem(
        FOLDERID_RecycleBinFolder, KF_FLAG_DEFAULT, nullptr, IID_PPV_ARGS(recycleBin.put())));

    // TODO:ここでごみ箱のIShellItemを操作します。
    wil::unique_cotaskmem_string pdisplayName;
    THROW_IF_FAILED(recycleBin->GetDisplayName(
        SIGDN_NORMALDISPLAY, pdisplayName.put()));

    std::wcout << pdisplayName.get() << std::endl;

    return 0;
}