c++ - 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;
}
解决方案
根据文件:
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);
推荐阅读
- android - 有什么方法可以从 Windows 而不是从 BIOS 启用 VT-x?(我的BIOS有我忘记的密码)
- nestjs - SpyOn TypeORM 存储库更改单元测试 NestJS 的返回值
- excel - 调整四舍五入问题的公式
- vim - putty -> tmux -> vim -> 改变光标形状
- rust - 什么是在 Rust 中将调试数据转储到静态文件的代码紧凑线程安全方法?
- python - 如何在 jinja2 模板中使用占位符?
- sql - SQL Server - 在链中查找不属于任何人的字母
- reactjs - 将我的移动设备的经纬度发送到本地服务器
- angular6 - 仅在 ng-select 中的数字
- java - 单元测试WorkManager时周期性工作未达到运行状态