gpt4 book ai didi

c++ - 带有 BIF_BROWSEFORCOMPUTER 和 SHGetPathFromIDList 的 SHBrowseForFolder 不工作

转载 作者:行者123 更新时间:2023-12-03 07:16:11 26 4
gpt4 key购买 nike

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

我可以让对话框显示并允许选择网络计算机,启用“确定”按钮,但是当我单击“确定”时,即使该函数返回一个不为 NULL 的 PIDL,对 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;
}

最佳答案

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

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

  • 使用 SHGetDesktopFolder() 获取 IShellFolder 接口(interface)位于 Shell 命名空间的顶部,然后将返回的 PIDL 传递给它的 GetDisplayNameOf() 方法。
  • 将返回的 PIDL 传递给 SHGetNameFromIDList() .
  • 只需点BROWSEINFO::pszDisplayName字段到缓冲区以供退出时填写的对话框,例如:

  • UINT __stdcall BrowseForFolder()
    {
    TCHAR szComputerName[MAX_COMPUTERNAME_LENGTH] = {};

    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

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

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

    // Get path.
    if (pidl)
    {
    MessageBox(GetForegroundWindow(), szComputerName, TEXT("Computer Name"), MB_ICONINFORMATION);

    // free memory used
    CoTaskMemFree(pidl);
    }

    CoUninitialize();

    return ERROR_SUCCESS;
    }

    关于c++ - 带有 BIF_BROWSEFORCOMPUTER 和 SHGetPathFromIDList 的 SHBrowseForFolder 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59847081/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com