SHSetFolderPathW 函数 (shlobj_core.h)

已弃用。 向其 CSIDL 标识的系统文件夹分配新路径。

语法

HRESULT SHSetFolderPathW(
  [in] int     csidl,
  [in] HANDLE  hToken,
  [in] DWORD   dwFlags,
  [in] LPCWSTR pszPath
);

参数

[in] csidl

类型: int

一个 CSIDL 值,该值标识要设置其路径的文件夹。 只有物理文件夹有效。 如果指定了虚拟文件夹,此函数将失败。

CSIDL_FLAG_DONT_UNEXPAND 值添加到 CSIDL,以确保字符串完全按照所提供的内容写入注册表。 如果未包含 CSIDL_FLAG_DONT_UNEXPAND 标志,则路径的某些部分可能会被环境字符串(如 %USERPROFILE%)替换。

[in] hToken

类型: HANDLE

可用于表示特定用户的 访问令牌 。 此参数通常设置为 NULL,在这种情况下,函数会尝试访问当前用户的文件夹实例。 但是,对于可以有多个用户但被视为属于单个用户的文件夹,可能需要为 hToken 分配值。 此类型最常用的文件夹是 Documents

hToken 为非 null 时,调用应用程序负责正确模拟。 它必须具有特定用户的相应安全权限,包括TOKEN_QUERY和TOKEN_IMPERSONATE,并且用户的注册表配置单元当前必须装载。 有关访问控制问题的进一步讨论,请参阅访问控制

[in] dwFlags

类型:DWORD

保留。 必须设置为 0。

[in] pszPath

类型: LPCTSTR

指向长度为 null 的字符串的指针MAX_PATH,该字符串包含文件夹的新路径。 此值不能为 NULL,字符串长度不能为零。

返回值

类型: HRESULT

返回标准 HRESULT 代码,包括以下内容:

返回代码 说明
S_OK
已成功更新文件夹的路径。
E_INVALIDARG
有几个错误条件会导致返回此值,其中包括:
  • csidl 值无效。
  • csidl 值不引用虚拟文件夹。
  • csidl 值不引用系统文件夹。
  • csidl 值是指无法重命名或移动的文件夹。
  • dwFlags 值不是 0 (零) 。
  • pszPath 值为 NULL
  • pszPath 值指向的字符串是长度为零的空字符串 (“”) 。

注解

注意 从 Windows Vista 开始,此函数只是 SHSetKnownFolderPath 的包装器。 CSIDL 值将转换为其关联的 KNOWNFOLDERID ,并调用 SHSetKnownFolderPath 。 新应用程序应使用已知的文件夹系统,而不是较旧的 CSIDL 系统,后者仅支持向后兼容性。
 
SHSetFolderPath 不会按名称从 Shell32.dll 导出。 若要使用 函数,必须为 ANSI 字符串调用序号为 231 for SHSetFolderPathA (的 GetProcAddress) 或 unicode 字符串) 的序号 232 for SHSetFolderPathW (来获取函数指针。

建议将路径表示为 Unicode 字符串,因为文件夹名称可能包含在 ANSI 中无法表达的 Unicode 字符。

注意

shlobj_core.h 标头将 SHSetFolderPath 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 shlobj_core.h (包括 Shlobj.h、Shlobj_core.h)
Library Shell32.lib
DLL Shell32.dll (5.0 或更高版本)

另请参阅

IKnownFolder::SetPath