如何获取Quick Access对应的IShellItem?所用GUID是否正确?
你遇到的0x80070057错误码对应E_INVALIDARG(参数无效),并非你用的GUID错误,而是SHCreateItemFromParsingName的路径格式不符合快速访问的Shell解析规则。
问题原因
此电脑的CLSID是Windows早期版本就存在的核心虚拟项,Shell解析器对它的::{GUID}裸路径格式做了向后兼容,所以可以正常解析。而快速访问是Windows 10才新增的虚拟Shell项,解析时要求路径必须带shell:::协议前缀,否则会被判定为无效路径。
修复方案
方案1:补充协议前缀(适配你现有写法)
SHCreateItemFromParsingName(L"shell:::{679F85CB-0220-4080-B29B-5540CC05AAB6}", NULL, IID_PPV_ARGS(&psi));
方案2:更推荐的官方接口写法(兼容性更强,无需拼接路径)
直接通过SHGetKnownFolderItem获取快速访问的IShellItem,不需要硬编码路径,适配不同Windows版本:
#include <KnownFolders.h> #include <ShlObj.h> #pragma comment(lib, "Shell32.lib") IShellItem* psi = nullptr; HRESULT hr = SHGetKnownFolderItem(FOLDERID_QuickAccess, KF_FLAG_DEFAULT, NULL, IID_PPV_ARGS(&psi)); if (SUCCEEDED(hr)) { // 此处执行你的业务逻辑 psi->Release(); }
内容的提问来源于stack exchange,提问作者herb
相关产品推荐
相关产品推荐

