如何可靠地获得XP和Vista中的快速启动文件夹?

我们需要在Vista和XP下为所有用户和当前用户可靠地获取快速启动文件夹。 我正在用C ++进行开发,但这可能更像是一个常见的Windows API问题。

作为参考,这里是两个系统下的应用程序数据文件夹的代码:

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

我怀疑这只是知道Microsoft使用哪个子文件夹的问题。

在Windows XP下,应用程序数据子文件夹是:

Microsoft \ Internet Explorer \快速启动

在Vista下,看起来子文件夹已被更改为:

漫游\微软\ Internet Explorer \快速启动

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

find正确的方法来确定这个位置是非常重要的,因为依赖于硬编码的文件夹名称几乎总是打破,当你进入国际安装等…事实上,该文件夹在Vista中命名为“漫游”,让我怀疑是否有是一些与该文件夹相关的特殊处理(类似于XP下的“本地设置”文件夹)。

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

所以每个MS下面的algorithm是正确的:

 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成功也是一个好主意。

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

此外,微软网站上这个artical http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept05/hey0901.mspx意味着你只需要使用相对于appdata文件夹的路径

好问题!

无论你做什么, 都不要陷入试图深入注册表中寻找这个信息!

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

希望有人对你的问题有适当的答案。 我很好奇自己知道!