【问题标题】:How to open a Windows Explorer in a user-created library?如何在用户创建的库中打开 Windows 资源管理器?
【发布时间】:2015-06-12 13:00:53
【问题描述】:

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

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

例如,

explorer.exe shell:PicturesLibrary

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

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

有人知道吗?

【问题讨论】:

    标签: c++ shell windows-explorer


    【解决方案1】:

    此控制台应用程序首先使用 SHGetKnownFolderPath 获取用户库文件夹的路径。然后它使用 ShellExecute 来“探索”这个目录中的“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"
    

    【讨论】:

    • 您说得对,先生。很有魅力。 我可以发誓我以前试过这个但没有成功: explorer "%AppData%\Microsoft\Windows\Libraries\My Library.library-ms" 但现在它工作正常。在许多其他试验中,可能有一两个错字丢失了......
    • 另外一点 - 只要 %AppData% 预先展开,这也适用于与 CFileDialog 关联的 OPENFILENAME 结构的 lpstrInitialDir 成员的值。
    猜你喜欢
    • 2012-02-18
    • 1970-01-01
    • 2022-07-27
    • 2012-06-25
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多