【发布时间】:2016-05-27 15:57:45
【问题描述】:
我正在使用 Winapi 的函数SHBrowseForFolder,我需要设置一个默认文件夹进行浏览。为此,我需要获取所需的默认文件夹的“PIDL”。我可以使用此函数获得“PIDL”:SHGetFolderLocation(hwnd, nCSIDL, NULL, NULL, &pidlRoot);,但正如您所见,second 参数是另一个标识符“nCSIDL”(类型 int)。
如何通过路径 (LPCSTR) 获取路径标识符?
这是我的代码:
TCHAR szDir[MAX_PATH];
BROWSEINFO bInfo;
HWND hwnd = ObPanelAPI::GetPanelHandleByName("*Current");
bInfo.hwndOwner = hwnd;
bInfo.pszDisplayName = szDir;
bInfo.lpszTitle = "Seleccionar directorio"; //Dialog title
bInfo.ulFlags = 0 ;
bInfo.lpfn = NULL;
bInfo.lParam = 0;
bInfo.iImage = -1;
//Default folder set
LPITEMIDLIST pidlRoot = NULL;
//*******I NEED TO GET nCSIDL HERE********
SHGetFolderLocation(hwnd, nCSIDL, NULL, NULL, &pidlRoot);
bInfo.pidlRoot = pidlRoot;
LPITEMIDLIST lpItem = SHBrowseForFolder(&bInfo);
【问题讨论】:
-
愚蠢的 MS 魔法数字:((msdn.microsoft.com/en-gb/library/windows/desktop/…
-
您想从路径中解析 CSIDL(常量特殊项 ID 列表)值吗?
-
@Emil 好的,正如您所说,这些数字是引用系统定义文件夹的常量。我不明白,我应该如何获得文件夹标识符? :s
-
嗯,我从未听说有人需要这样做。为什么需要标识符?查看路径是否为“特殊文件夹”?
-
这是一个奇怪的线程。 CSIDL 和 KNOWNFOLDERID 是常量值,即使它们引用的磁盘上的实际路径可能会发生变化。因此,如果您想从配置文件文件夹开始,您可以使用
CSIDL_PROFILE或FOLDERID_Profile以及适当的函数将它们转换为 PIDL。这些值都列在 MSDN 文档中。
标签: c++ winapi path directory identifier