首页 > 解决方案 > IShellFolder::GetDisplayNameOf 返回乱码

问题描述

我是 winapi 和 c/c++ 的新手,我尝试使用 IShellFolder::GetDisplayNameOf 打印出桌面上图标的名称,但由于某种原因,我变得乱码。这是我的代码:

    int main() {
    HRESULT hr;
    IShellFolder* deskFolder;
    hr = SHGetDesktopFolder(&deskFolder);
    IEnumIDList* listilist;
    deskFolder->EnumObjects(NULL, SHCONTF_NONFOLDERS | SHCONTF_FOLDERS, &listilist);
    ITEMIDLIST* item;
    deskFolder->Release();
    while (listilist->Next(1, &item, NULL) == S_OK) {
        STRRET coo = {0};
        deskFolder->GetDisplayNameOf(item, SHGDN_INFOLDER, &coo);
        printf("%s\n", coo.cStr);
        item = NULL;
    }
    return 0;
}

标签: c++winapidesktop

解决方案


根据文件

uType

类型:UINT

一个值,指定所需的字符串格式。这可以是以下值之一。

STRRET_CSTR

字符串在 cStr 成员中返回。

STRRET_OFFSET

uOffset 成员值表示从字符串所在的项标识符列表开始的字节数。

STRRET_WSTR

该字符串位于 pOleStr 成员指定的地址。

您可以检查以下utype参数coo

printf("%d\n", coo.uType);

检查后返回值为0(STRRET_WSTR),所以需要修改代码为

printf("%S\n", coo.pOleStr);

推荐阅读