如何在用户创建的库中打开 Windows 资源管理器?

How to open a Windows Explorer in a user-created library?

最终,我希望能够在 C++ 代码中为文件对话框执行此操作,但能够从命令行执行此操作将是一个好的开始...

对于 'standard' 库 - 文档、音乐、图片和视频 - 我知道有一些特殊的 'shell:' 名称可以使用(列表 here)。

因此,例如,

explorer.exe shell:PicturesLibrary

将直接在图片库视图中打开资源管理器。

但是我已经创建了一个新库,比如说 'My Library',但我找不到任何方法可以直接在 'My Library' 中打开资源管理器。到目前为止我能做的最好的就是打开 'shell:Libraries' 并强制用户从那里下降。

有人知道吗?

此控制台应用程序首先使用 SHGetKnownFolderPath 获取用户库文件夹的路径。然后它使用 ShellExecute 来 "explore" 这个目录中的 "My Library" 库文件。

SHGetKnownFolderPath 给出的字符串被 CoTaskMemFree 释放。此外,SHGetKnownFolderPath 没有 ANSI 版本,所以我只是将所有内容都设为宽字符显式。

不包括错误检查,因此您可能需要添加它。

#include <Windows.h>
#include <Shellapi.h>
#include <Shlobj.h>

int main() {
    PWSTR libraries_path = NULL;
    SHGetKnownFolderPath(FOLDERID_Libraries, 0, NULL, &libraries_path);
    ShellExecuteW(NULL, L"explore", L"My Library.library-ms",NULL,libraries_path,SW_SHOW);
    CoTaskMemFree(libraries_path);
}

从命令行执行类似的操作:

"%appdata%\Microsoft\Windows\Libraries\My Library.library-ms"