为什么我找不到CSIDL_PROFILES的#define?

时间:2009-06-25 17:59:13

标签: winapi windows-shell

我正在尝试使用ShGetFolderPath来确定用户个人资料文件夹的路径。文档说明CSIDL_PROFILES定义了这个文件夹:

  

CSIDL_PROFILES(0x003e)

     

版本6.0。包含用户配置文件文件夹的文件系统目录典型的路径是C:\ Documents and Settings。

我使用的是Visual Studio 2005 SP1,我无法在Platform SDK包含文件中找到常量CSIDL_PROFILES的定义?我是否需要新版本的Platform SDK?

所以我通过使用ID 0x3e代替符号做了一些实验。但是,看起来0x3e不是接受CSIDL_ *参数的shell函数的有效参数(返回了无效的参数错误)。

所以我猜CSIDL_PROFILES不是一个有效的参数,并且当他们提到这个符号时,该主题上的至少一些MSDN页面是不正确的。我不得不说,在我使用Win32 / MSDN文档的所有这些年里,我都记不起类似的情况了。

3 个答案:

答案 0 :(得分:0)

MSDN documentation for CSIDLs中列出了,因此较新版本的PSDK不太可能对您有所帮助。

你显然可以自己做:

#define CSIDL_PROFILES 0x003E

...但鉴于它似乎完全没有MS记录,这不是我推荐的。

答案 1 :(得分:0)

当有人注意到它毫无价值时,我会说这已被删除。你还能用它做什么吗?您仍然需要为每个用户确定他的配置文件是否实际存在于此目录下。但是,由于您通常会按用户进行检查,因此您需要默认设置时,唯一的一点就是创建新的用户配置文件。无论如何,那是Windows内部代码。

答案 2 :(得分:0)

您应该使用GetProfilesDirectory()但如果您真正想要的是其他用户的CSIDL,则应使用其令牌调用SHGetFolderPath。 (如果您没有令牌,则需要使用a hacky workaround