相关疑难解决方法(0)

如何使用Windows Shell API解析探索器痕迹路径,如"此PC\Galaxy Tab A\Card\Folder1"?

当用户在Windows资源管理器中导航到例如他的Android手机的SD卡上的文件夹时,资源管理器会显示一种痕迹路径,就像"This PC\Galaxy Tab A\Card\Folder1"在地址栏中单击一样.

在地址栏中输入或复制它们并按回车键时,Windows资源管理器也接受这些路径.

我想知道是否有办法使用Shell API解析这些面包屑路径并获得PItemIDListIShellItem作为回报.到目前为止,我没有成功使用eg SHParseDisplayName().这段代码

LPITEMIDLIST itemidlist;
HRESULT hr = SHParseDisplayName(L"This PC\\Galaxy Tab A\\Card\\testfolder", NULL, &itemidlist, 0, NULL);
Run Code Online (Sandbox Code Playgroud)

回来0x80070002HRESULT.

问题SHParseDisplayName当路径不存在这样一个问题涉及如何使用IBindCtx解析到一个并不存在的文件的路径.这可以使用STR_FILE_SYS_BIND_DATA绑定上下文来完成.但是移动设备上的对象不是文件系统数据,而且它们已经存在,所以我不明白为什么这是重复的.

windows winapi windows-shell

6
推荐指数
0
解决办法
248
查看次数

如何获取卷 GUID 路径的 PIDL

我试图弄清楚如何获取卷 Guid 路径(例如“ \\?\Volume{50165421-0000-0000-0000-005d25000000}\”)的 PI​​DL(或 IShellItem 或 IShellFolder)。我希望能够从我的程序或其子对象上调用文件操作或 shell 上下文菜单项。如果它已安装并可通过驱动器号或文件夹访问,没问题,但我正在努力处理未安装的卷。
虽然 Windows 资源管理器的地址栏无法解析这些名称,但可以使用 run 命令(或使用 ShellExecute)打开 Windows 资源管理器:

  • 通过“磁盘管理”,创建一个新卷,而不分配驱动器号或文件夹:创建没有驱动器的卷
  • 使用 mountvol,您可以看到带有“无挂载点”的卷名称 (1)
  • 将卷路径复制到运行命令中 (2)
  • 查看 Windows 资源管理器 (3) 在资源管理器中打开卷

一旦在 Windows 资源管理器中打开,它就可以很好地处理路径,即枚举和上下文菜单正常工作。

到目前为止我已经尝试过

实际上,我没有检查很多 IBindCtx 选项,因为从文档中我不确定该用例应该尝试哪些选项。

  • 在这里尝试了 @RbMm 共享的未记录的 IShellURL 接口- 它显示与 AddressBar 相同的错误消息框。

  • 卷管理参考中,我也没有看到 PIDL 的连接点。

  • 使用带有 Process Monitor 的 ShellExecute 跟踪卷名称的开头,我看到 Windows 资源管理器正在访问

HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\?\Volume{50165421-0000-0000-0000-005D25000000},就在打开“ \Device\HarddiskVolume3\”之前。但我什至不确定这是否相关。

有谁知道我还可以尝试什么?

windows winapi windows-shell

5
推荐指数
0
解决办法
346
查看次数

标签 统计

winapi ×2

windows ×2

windows-shell ×2