关于Windows:如何可靠地在XP和Vista中获取”快速启动”文件夹?

关于Windows:如何可靠地在XP和Vista中获取”快速启动”文件夹?

How do you reliably get the Quick Launch folder in XP and Vista?

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

作为参考,这是在两个系统下获取Application Data文件夹的代码:我怀疑这只是知道Microsoft使用哪个子文件夹的问题。

在Windows XP中,应用程序数据子文件夹为:

Microsoft \\\\ Internet Explorer \\\\ Quick Launch

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

Roaming \\\\ Microsoft \\\\ Internet Explorer \\\\ Quick Launch

,但我想确保

找到确定此位置的正确方法非常重要,因为在进入国际安装目录时,依赖于硬编码的文件夹名称几乎总是会中断。该文件夹在Vista中被命名为"漫游"的事实使我想知道是否有与该文件夹相关的特殊处理(类似于XP下的Local Settings文件夹)。 http:// m sdn.microsoft.com/zh-cn/library/bb762494.aspx表示CSIDL_APPDATA的等效ID为FOLDERID_RoamingAppData,这似乎支持StocksR的断言,即CSIDL_APPDATA确实返回了C:\\\\ Users \\\\ xxxx \\\\ AppData \\\\ roaming ,因此对于CSIDL_APPDATA可以使用相同的相对路径来快速启动(\\\\ Microsoft \\\\ Internet Explorer \\\\ Quick Launch)。

因此,每个MS的以下算法均正确: >

1
2
3
4
5
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 \\\\\\\\\\\\漫游而不是C:\\\\\\\\ Users \\\\\\\\\\ xxxx \\\\\\\\ AppData文件夹

此外,这篇在Microsoft网站上的文章http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept05/hey0901.mspx意味着您只需使用相对于appdata文件夹

的路径


好问题!

无论您做什么,都不要屈从于诱惑来深入研究注册表以查找此信息!

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

希望有人正确回答了您的问题;我很好奇自己知道!


推荐阅读