SHGetSpecialFolderPath函数检索由其CSIDL标识的特殊文件夹的路径。
所在头文件#include <shlobj.h>
#pragma comment(lib, "shell32.lib")
函数原型:
BOOL SHGetSpecialFolderPath(
HWND hwndOwner,
LPTSTR lpszPath,
int nFolder,
BOOL fCreate
);
参数:
hwndOwner:如果显示对话框或消息框,窗口的句柄,可用GetDesktopWindow API取一个窗口句柄或直接传NULL。
lpszPath:存放路径信息的缓冲区。这个缓冲区的大小必须至少为MAX_PATH字符。
nFolder:标识要查询的文件夹的CSIDL。
fCreate:指示如果文件夹不存在,是否应该创建它。如果该值为非零,则创建文件夹。如果该值为零,则不创建文件夹。
返回值:
对于Windows Mobile 2003及以后版本,如果成功则返回TRUE,否则返回FALSE。对于Windows Mobile 2002和更早的版本,即使成功也返回FALSE。如果nFolder参数表示的文件夹不存在且未创建,则返回一个空字符串,表示该目录不存在。
注:许多文件夹经常被应用程序使用,但在任何给定的系统上可能没有相同的名称或位置。CSIDL值提供了一种独立于系统的方式来标识这些特殊的文件夹。这些值取代了为此目的而使用的环境变量。
示例:
char Path[MAX_PATH] = { 0 };
SHGetSpecialFolderPath(0, LQ_logPath, CSIDL_DESKTOPDIRECTORY, 0); //获取当前用户桌面路径
常用的路径标识CSIDL:
CSIDL_DESKTOPDIRECTORY($10) 表示当前用户的“桌面”文件夹,例如:C:\Documents and Settings\username\Desktop
CSIDL_DRIVES($11) 表示“我的电脑”虚拟文件夹,包含了计算机中所有的驱动器
CSIDL_FAVORITES($6) 表示当前用户的“收藏夹”文件夹,例如:C:\Documents and Settings\username\Favorites
CSIDL_FONTS($14) 表示“系统字体”文件夹,例如:C:\WINNT\Fonts
CSIDL_HISTORY($22) 表示Inernet Explorer的“历史记录”文件夹
CSIDL_INTERNET($1) 表示Internet的这个虚拟文件夹
CSIDL_INTERNET_CACHE($20) 表示当前用户的Internet Explorer的"Cache"文件夹,例如:C:\Documents and Settings\username\Temporary Internet Files
CSIDL_LOCAL_APPDATA($1C) 表示当前用户的应用程序数据文件夹,例如:C:\Documents and Settings\username\Local Settings\Application Data
CSIDL_MYMUSIC 表示当前用户存储音乐文件的文件夹,例如:C:\Documents and Settings\User\My Documents\My Music
CSIDL_MYPICTURES($27) 表示当前用户存储图像文件的文件夹,例如:C:\Documents and Settings\username\My Documents\My Pictures
CSIDL_NETHOOD($13) 表示当前用户存在的网络连接的文件夹,例如:C:\Documents and Settings\username\NetHood
CSIDL_NETWORK($12) 表示“网上邻居”这个虚拟文件夹
CSIDL_PERSONAL($5) 表示当前用户的“我的文档”文件夹,例如:C:\Documents and Settings\username\My Documents
CSIDL_PRINTERS($4) 指向“打印机”这个虚拟文件夹
CSIDL_PRINTHOOD($1B) 表示当前用户存在的网络打印机的虚拟文件夹,例如:C:\Documents and Settings\username\PrintHood
CSIDL_PROGRAM_FILES($26) 表示程序文件的文件夹,例如:C:\Program Files
CSIDL_PROGRAM_FILES_COMMON($2B) 表示系统程序共用组件文件夹,例如:C:\Program Files\Common
CSIDL_PROGRAMS($2) 表示当前用户的“程序”菜单文件夹,例如:C:\Documents and Settings\username\Start Menu\Programs
CSIDL_RECENT($8) 表示当前用户的“文档”菜单文件夹,例如:C:\Documents and Settings\username\Start Menu\Programs
CSIDL_SENDTO($9) 表示当前用户的“发送到”文件夹,例如:C:\Documents and Settings\username\SendTo
CSIDL_STARTMENU($B) 表示当前用户的“开始”菜单文件夹,例如:C:\Documents and Settings\username\Start Menu
CSIDL_STARTUP($7) 表示当前用户的“启动”菜单文件夹,例如:C:\Documents and Settings\username\Start Menu\Programs\Startup
CSIDL_SYSTEM($25) 表示WINDOWS系统的系统文件夹,例如:C:\WINNT\SYSTEM32
CSIDL_TEMPLATES($15) 表示的是系统中存储文档模块的文件夹
CSIDL_APPDATA($1A) 表示当前用户的特定的应用程序数据存储文件夹,例如:C:\Documents and Settings\username\Application Data
CSIDL_BITBUCKET($A) 表示回收站
CSIDL_COMMON_ADMINTOOLS($2F) 表示所有用户的“管理工具”系统文件夹
CSIDL_COMMON_ALTSTARTUP($1D) 表示所有用户的 (只支持WINDOWS NT 系统)
CSIDL_COMMON_APPDATA($23) 表示所有用户的特定的应用程序数据存储文件夹,例如:C:\Documents and Settings\All Users\Application Data
CSIDL_COMMON_DESKTOPDIRECTORY($19) 表示所有用户的“桌面”文件夹,例如:C:\Documents and Settings\All Users\Desktop。
CSIDL_COMMON_DOCUMENTS($2E) 表示所有用户的“我的文档”文件夹,例如:C:\Documents and Settings\All Users\Documents
CSIDL_COMMON_FAVORITES($1F) 表示所有用户的“我的收藏夹”文件夹
CSIDL_COMMON_PROGRAMS($17) 表示所有用户的“程序”文件夹,例如:C:\Documents and Settings\All Users\Start Menu\Programs
CSIDL_COMMON_STARTMENU($16) 表示所有用户的“开始菜单”文件夹,例如:C:\Documents and Settings\All Users\Start Menu
CSIDL_COMMON_STARTUP($18) 表示所有用户的“启动”文件夹,例如:C:\Documents and Settings\All Users\StartMenu\Programs\Startup
CSIDL_CONTROLS($3) 表示“控制面板”文件夹
CSIDL_COOKIES($21) 表示当前用户Internet Explorer的cookie 文件夹,例如:C:\Documents and Settings\username\Cookies
CSIDL_DESKTOP($0) 表示“桌面”虚拟文件夹,包含了计算机中的所有内容