Given KNOWNFOLDERID or its GUID get the associated icon under Windows
See the question and my original answer on StackOverflowSomething like this, based on the IShellItemImageFactory interface that exists since Windows Vista:
CoInitialize(NULL);
{
CComPtr<IKnownFolderManager> mgr;
if (SUCCEEDED(mgr.CoCreateInstance(CLSID_KnownFolderManager)))
{
CComPtr<IKnownFolder> folder;
if (SUCCEEDED(mgr->GetFolder(FOLDERID_ControlPanelFolder, &folder)))
{
CComHeapPtr<ITEMIDLIST> pidl;
// I pass 0 for flags here, but mileage may differ
if (SUCCEEDED(folder->GetIDList(0, &pidl)))
{
CComPtr<IShellItemImageFactory> factory;
if (SUCCEEDED(SHCreateItemFromIDList(pidl, IID_PPV_ARGS(&factory))))
{
// you can vary size and SIIGBF flags
HBITMAP bmp = nullptr;
SIZE size = { 256, 256 };
if (SUCCEEDED(factory->GetImage(size, SIIGBF_ICONONLY, &bmp)))
{
// etc...
DeleteObject(bmp);
}
}
}
}
}
}
CoUninitialize();
And there is even a better way using the SHCreateItemInKnownFolder function:
CoInitialize(NULL);
{
CComPtr<IShellItemImageFactory> factory;
if (SUCCEEDED(SHCreateItemInKnownFolder(FOLDERID_ControlPanelFolder, 0, NULL, IID_PPV_ARGS(&factory))))
{
// you can vary size and SIIGBF flags
HBITMAP bmp = nullptr;
SIZE size = { 256, 256 };
if (SUCCEEDED(factory->GetImage(size, SIIGBF_ICONONLY, &bmp)))
{
// etc...
DeleteObject(bmp);
}
}
}
CoUninitialize();
Note this will get you the icon as an HBITMAP.