1

我有一个用 C++ 编写的 Windows 应用程序。应用程序在隐藏目录中生成某些配置文件。我想为用户提供从我的应用程序中打开该目录的选项。单击该选项应打开带有输入目录位置的 Windows 资源管理器之类的对话框。我花时间搜索类似的 api,但最终会出现某些对话框,例如“DlgDirListComboBoxW”或“GetOpenFileName”或“GetSaveFileName”。我正在寻找一个 api 来打开普通的 Windows 资源管理器,比如带有输入目录位置的对话框。如果 api 属于 CommonDialogs 部分,那将非常有帮助。

4

2 回答 2

1

您可以使用SHBrowseForFolder

它显示了一个与此类似的对话框:

在此处输入图像描述

这是如何使用它的示例:

BOOL GetFolder(LPCSTR folderpath, 
               LPCSTR szCaption, 
               HWND hOwner /*= NULL*/)
{
    BOOL retVal = FALSE;

    // The BROWSEINFO struct tells the shell 
    // how it should display the dialog.
    BROWSEINFO bi;
    memset(&bi, 0, sizeof(bi));

    bi.ulFlags   = BIF_USENEWUI;
    bi.hwndOwner = hOwner;
    bi.lpszTitle = szCaption;   

    // must call this if using BIF_USENEWUI
    ::OleInitialize(NULL);

    // Show the dialog and get the itemIDList for the 
    // selected folder.
    LPITEMIDLIST pIDL = ::SHBrowseForFolder(&bi);

    if(pIDL != NULL)
    {
        // Create a buffer to store the path, then 
        // get the path.
        char buffer[_MAX_PATH] = {'\0'};
        if(::SHGetPathFromIDList(pIDL, buffer) != 0)
        {
            // Set the string value.
            folderpath = buffer;
            retVal = TRUE;
        }

        // free the item id list
        CoTaskMemFree(pIDL);
    }

    ::OleUninitialize();

    return retVal;
}
于 2015-01-21T07:30:33.590 回答
1

怎么样:

HWND hWndOwner = NULL;

ShellExecute(
    hWndOwner,
    _T("explore"),
    _T("c:\\some\\path"),
    NULL,
    NULL,
    SW_SHOWNORMAL);

如果您愿意,可以设置hWndOwner为主窗口句柄,并且可以从各种其他选项中进行选择。

有关更多信息和使用详情,请查看 MSDN 页面ShellExecute

于 2015-01-21T06:59:23.560 回答