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