windows c++ 选择文件夹

#include <windows.h>
#include <shobjidl_core.h>

bool SelectFolder(std::wstring& selectedFolder)
{
    HRESULT hrs = CoInitialize(NULL);
    if (!SUCCEEDED(hrs)) {
        return false;
    }
    IFileOpenDialog* pFileOpen;

    // 创建文件选择对话框接口
    if (FAILED(CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL, IID_IFileOpenDialog, reinterpret_cast<void**>(&pFileOpen))))
        return false;

    // 设置选择选项
    DWORD dwOptions;
    if (SUCCEEDED(pFileOpen->GetOptions(&dwOptions)))
    {
        pFileOpen->SetOptions(dwOptions | FOS_PICKFOLDERS);
    }

    // 显示对话框
    HRESULT hr = pFileOpen->Show(NULL);
    if (hr == HRESULT_FROM_WIN32(ERROR_CANCELLED))
    {
        // 用户取消了选择
        pFileOpen->Release();
        return false;
    }

    // 获取选中的项目
    IShellItem* pItem;
    if (SUCCEEDED(pFileOpen->GetResult(&pItem)))
    {
        // 获取文件夹的路径
        PWSTR filePath;
        if (SUCCEEDED(pItem->GetDisplayName(SIGDN_FILESYSPATH, &filePath)))
        {
            selectedFolder = filePath;
            CoTaskMemFree(filePath);
        }
        pItem->Release();
    }

    pFileOpen->Release();

    CoUninitialize();

    return !selectedFolder.empty();
}

void selectFolder(){
 TCHAR szBuffer[MAX_PATH] = { 0 };
    BROWSEINFO bi;
    ZeroMemory(&bi, sizeof(BROWSEINFO));
    bi.hwndOwner = NULL;
    bi.pszDisplayName = szBuffer;
    bi.lpszTitle = NULL;// L"从下面选文件夹目录:";
    bi.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE ;
    LPITEMIDLIST idl = SHBrowseForFolder(&bi);
    if (NULL == idl)
    {
        return 0;
    }
    SHGetPathFromIDList(idl, szBuffer);

}

二选其一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值