Я пытаюсь заставить работать SHBrowseForFolder с BIF_BROWSEFORCOMPUTER, чтобы пользователь мог выбрать компьютер в сети.
Я могу получить диалоговое окно для отображения и разрешить выбор сетевого компьютера, кнопка ОК включена, но когда я нажимаю ОК, даже если функция возвращает PIDL, который не равен NULL, вызов SHGetPathFromIDList завершается неудачно и поэтому путь к удаленному компьютеру недоступен.
Вызываю ли я нужную функцию для получения имени удаленного компьютера?
Код:
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;
}