potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

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;
}