C++ SHBROWSEFOR文件夹具有BIF_BROWSEFOR COMPUTER和SHGetPathFromIDList的BIF_BROWSEFOR未工作

C++ SHBROWSEFOR文件夹具有BIF_BROWSEFOR COMPUTER和SHGetPathFromIDList的BIF_BROWSEFOR未工作,c++,windows,shell32,C++,Windows,Shell32,我正在尝试使用BIF_BROWSEFORCOMPUTER使SHBrowseForFolder正常工作,以便允许用户选择网络上的计算机 我可以让对话框显示并允许选择网络计算机,“确定”按钮处于启用状态,但当我单击“确定”时,即使函数返回的PIDL不为空,对SHGetPathFromIdleist的调用也会失败,因此远程计算机的路径不可用 我是否调用了正确的函数来获取远程计算机名 代码: SHGetPathFromIDList()仅适用于文件系统路径。网络计算机不是文件系统的一部分,因此不能使用SH

我正在尝试使用BIF_BROWSEFORCOMPUTER使SHBrowseForFolder正常工作,以便允许用户选择网络上的计算机

我可以让对话框显示并允许选择网络计算机,“确定”按钮处于启用状态,但当我单击“确定”时,即使函数返回的PIDL不为空,对SHGetPathFromIdleist的调用也会失败,因此远程计算机的路径不可用

我是否调用了正确的函数来获取远程计算机名

代码:

SHGetPathFromIDList()
仅适用于文件系统路径。网络计算机不是文件系统的一部分,因此不能使用
SHGetPathFromIDList()
执行此任务

如果需要所选计算机的名称,可以:

  • 用于获取Shell名称空间顶部的接口,然后将返回的PIDL传递给其方法

  • 将返回的PIDL传递给

  • 只需将
    BROWSEINFO::pszDisplayName
    字段指向要在退出时填充的对话框缓冲区,例如:

UINT\uu stdcall BrowseForFolder()
{
TCHAR szComputerName[MAX_COMPUTERNAME_LENGTH]={};
CoInitializeX(空,Conit_APARTMENTTHREADED);
//设置浏览结构。
BROWSEINFO bi={0};
bi.lpszTitle=文本(“选择计算机”);
bi.hwndOwner=GetForegroundWindow();
bi.pszDisplayName=szComputerName;
bi.ulFlags=BIF_USENEWUI | BIF_浏览计算机;
//召唤
LPITEMIDLIST pidl=SHBrowseForFolder(&bi);
//获取路径。
if(pidl)
{
MessageBox(getForeGroundIndow(),szComputerName,文本(“计算机名”),MB_图标信息);
//使用的可用内存
CoTaskMemFree(pidl);
}
coninitialize();
返回错误\成功;
}

作为一名新手,我确实意识到我不应该说谢谢,但这解决了我的问题,谢谢雷米@Vduce见
UINT __stdcall BrowseForFolder()
{
    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

    // Setup browse structure.
    BROWSEINFO bi = { 0 };
    bi.lpszTitle = TEXT("Pick a Directory");
    bi.hwndOwner = GetForegroundWindow();
    bi.ulFlags = BIF_USENEWUI | BIF_BROWSEFORCOMPUTER;

    // Call 
    LPITEMIDLIST pidl = SHBrowseForFolder(&bi);

    // Get path.
    if (pidl)
    {
        // get the name of the folder
        TCHAR path[MAX_PATH];
        if (SHGetPathFromIDList(pidl, path))    // This function fails and path is NULL.
        {
            MessageBox(GetForegroundWindow(), path, TEXT("Path"), MB_ICONINFORMATION);
        }

        // free memory used
        CoTaskMemFree(pidl);
    }

    CoUninitialize();

    return ERROR_SUCCESS;
}