代码之家  ›  专栏  ›  技术社区  ›  Kevin Day

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

  •  1
  • Kevin Day  · 技术社区  · 18 年前

    我们需要在Vista和XP下为所有和当前用户可靠地获取快速启动文件夹。我是用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\快速启动

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

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

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

    寻找 对的 确定此位置的方法非常重要,因为当您进入国际安装等时,依赖硬编码的文件夹名称几乎总是会中断。Vista中该文件夹名为“漫游”的事实让我想知道是否有与该文件夹相关的特殊处理(类似于XP下的本地设置文件夹)。

    编辑: 以下是msdn文章: http://msdn.microsoft.com/en-us/library/bb762494.aspx 表示CSIDL_APPDATA具有等效的ID FOLDRID_RoamingAppData,这似乎支持StocksR的断言,即CSIDL_APPDATA确实返回C:\Users\xxxx\APPDATA\Roaming,因此应该可以使用相同的相对路径使CSIDL_APDATA快速启动(\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 回复  |  直到 17 年前
        1
  •  2
  •   StocksR    18 年前

    vista上的AppData指的是C:\Users\xxxx\AppData\Roaming,而不是C:\Users\xxx \AppData文件夹本身。

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

        2
  •  1
  •   Judah Gabriel Himango    18 年前

    好问题!

    无论你做什么, do not 的常用口语形式 屈服于诱惑 dig into the registry 查找此信息!

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

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