【问题标题】:ShellExecute to open a special folder (ex: "Libraries\Documents") without knowing the special folder nameShellExecute 在不知道特殊文件夹名称的情况下打开特殊文件夹(例如:“Libraries\Documents”)
【发布时间】:2012-02-21 17:41:51
【问题描述】:

我正在制作一个应用程序来备份打开的文件夹。 问题是,如果该文件夹中有一些特殊文件夹(例如:“Desktop”、“Computer”、“Libraries\Documents”……),它们将无法打开。

我知道这些对象有常量,但我不知道会打开哪些文件夹,所以制作一个包含所有 SpecialNames 的字典 => SpecialConstant 对我来说不是一个好的解决方案。

所以问题是: 是否有任何 WinApi 函数可以从特殊文件夹的短名称中检索完整路径?

附:尝试了 ShellExecute("open", "Path") 和 ShellExecute("open", "explorer.exe", "Path") 如果您将名称粘贴到资源管理器中,它们会起作用,但从 C++ 中打开它们不起作用

谢谢

【问题讨论】:

  • 这些是 虚拟文件夹,由 shell 命名空间扩展提供。备份虚拟文件夹没有意义,专注于磁盘上的真实文件系统目录。
  • 我需要反转它们,以便在用户需要时打开它们。
  • 那么我相信你将不得不构建一个虚拟/实际路径表。
  • 是的,这是更难的方式,因为不同版本的windows等。我会等几天也许有人会建议一些东西,然后我会和桌子一起去。 :)

标签: c++ winapi directory shellexecute


【解决方案1】:

库作为 XML 文件存储在用户 %appdata%\Roaming\Microsoft\Windows\Libraries 目录中,名称为 <libraryname>.library-ms(例如 Pictures.library-ms。)使用 ShellExecute 打开其中一个文件会打开资源管理器窗口并显示库。

【讨论】:

  • 谢谢,这将解决库问题,但其他文件夹,如桌面、计算机、控制面板,您有什么建议吗?我还找到了一个特殊文件夹列表,以防我必须为其余文件夹构建字典codeproject.com/Articles/13280/…
  • @Spider CodeProject 文章有你需要的一切。只需使用表中指定的参数在 Explorer 上调用 ShellExecute。例如ShellExecuteW(0, "Open", "Explorer", "/N,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}", "", 1) 应该打开控制面板。其他真实的目录(如桌面)可以通过老式方式获得:SHGetFolderPath
猜你喜欢
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多