你如何在XP和Vista中可靠地获得Quick Launch文件夹?

时间:2008-09-16 19:37:08

标签: windows visual-c++

我们需要在Vista和XP下为所有和当前用户可靠地获取Quick Launch文件夹。我正在用C ++开发,但这可能更像是一般的Windows API问题。

作为参考,这里是获取两个系统下的Application Data文件夹的代码:

    HRESULT hres; 
    CString basePath;
    hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
    basePath.ReleaseBuffer();

我怀疑这只是了解微软使用哪个子文件夹。

在Windows XP下,应用数据子文件夹为:

Microsoft \ Internet Explorer \ Quick Launch

在Vista下,子文件夹似乎已更改为:

漫游\ Microsoft \ Internet Explorer \快速启动

但我想确保这是确定正确位置的正确方法。

找到正确的方式来确定这个位置非常重要,因为当您进入国际安装等时,依赖于硬编码文件夹名称几乎总是会中断...文件夹命名的事实Vista中的“漫游”让我想知道是否有一些与该文件夹相关的特殊处理(类似于XP下的Local Settings文件夹)。

编辑: 以下msdn文章:http://msdn.microsoft.com/en-us/library/bb762494.aspx表示CSIDL_APPDATA具有等效ID FOLDERID_RoamingAppData,它似乎支持StocksR断言CSIDL_APPDATA确实返回C:\ Users \ xxxx \ AppData \ Roaming,因此应该可以使用CSIDL_APPDATA快速启动的相对路径(\ Microsoft \ Internet Explorer \ Quick Launch)。

因此,以下算法对每个MS都是正确的:

HRESULT hres; 
CString basePath;
hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
basePath.ReleaseBuffer();
CString qlPath = basePath + "\\Microsoft\\Internet Explorer\\Quick Launch";

检查hres以确保对SHGetSpecialFolderPath的调用成功是个好主意。

2 个答案:

答案 0 :(得分:2)

vista上的AppData指的是C:\ Users \ xxxx \ AppData \ Roaming而不是它自己的C:\ Users \ xxxx \ AppData文件夹。

此外,微软网站上的这个艺术http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept05/hey0901.mspx暗示您只需使用相对于appdata文件夹的路径

答案 1 :(得分:1)

好问题!

无论你做什么,都会诱使dig into the registry找到这个信息!

此外,我们必须抵制硬编码某些路径的诱惑,甚至是部分路径。如果我们获得特殊的AppData路径,那么只需在最后添加一个字符串,这可能会在文件夹名称本地化为该语言的软件的非美国安装下中断。例如。 GetSpecialFolderPath(APP_DATA) + "\\Fonts"不适用于非英语版本的Windows。

希望有人对你的问题有正确的答案;我很想知道自己!