VC++获取指定的系统路径

方法1:
BOOL SHGetSpecialFolderPath( HWND hwndOwner , LPTSTR lpszPath , int nFolder , BOOL fCreate );
hwndOwner: 所有者窗口句柄,可用GetDesktopWindow API取一个桌面窗口句柄。或直接传null.
lpszPath: 返回路径的缓冲区
nFolder: 指定的系统目录标识代号
fCreate: true-如果文件夹不存在则创建,false-不创建
示例:
TCHAR szCommonDesktopDirectory[MAX_PATH] = { 0 };
    	bRet = SHGetSpecialFolderPath(NULL, szCommonDesktopDirectory, CSIDL_DESKTOPDIRECTORY, FALSE);
   
TCHAR szCurrentFavorites[MAX_PATH] = { 0 };
    	bRet = SHGetSpecialFolderPath(NULL, szCurrentFavorites, CSIDL_FAVORITES, FALSE);

方法2:
HRESULT SHGetSpecialFolderLocation( HWND hwndOwner,   int nFolder,  PIDLIST_ABSOLUTE *ppidl);
hwndOwner: 所有者窗口句柄,可用GetDesktopWindow API取一个桌面窗口句柄。或直接传null.
nFolder: 指定的系统目录标识代号
ppidl: 一个条目标识符列表指针,可以传入一个LPITEMIDLIST类型变量,再从这个变量中得到表示路径的字符串。使用完后,要用void CoTaskMemFree(void * pv)来释放资源。
BOOL SHGetPathFromIDListPCIDLIST_ABSOLUTE pidl,  LPTSTR pszPath);
pidl: 上一个函数获取到的条目标识符列表指针.
pszPath: 返回路径的缓冲区
示例:
HRESULT hr = SHGetSpecialFolderLocation(NULL, nFolders[i], &ppidl);   
if (hr != S_OK)  
{  
 	printf("SHGetSpecialFolderLocation Error\n");  
 }  
else  
{  
if (SHGetPathFromIDList(ppidl, szPath))  
printf("%s\n", szPath);  
else  
printf("SHGetPathFromIDList Error\n");  
CoTaskMemFree(ppidl);  
}  
指定系统目录标识
CSIDL_DESKTOP 	0x0000 // <desktop>
CSIDL_INTERNET 	0x0001 // Internet Explorer (icon on desktop)
CSIDL_PROGRAMS 	0x0002 // Start Menu\Programs
CSIDL_CONTROLS 	0x0003 // My Computer\Control Panel
CSIDL_PRINTERS 	0x0004 // My Computer\Printers
CSIDL_PERSONAL 	0x0005 // My Documents
CSIDL_FAVORITES 	0x0006 // <user name>\Favorites
CSIDL_STARTUP 	0x0007 // Start Menu\Programs\Startup
CSIDL_RECENT 	0x0008 // <user name>\Recent
CSIDL_SENDTO 	0x0009 // <user name>\SendTo
CSIDL_BITBUCKET 	0x000a // <desktop>\Recycle Bin
CSIDL_STARTMENU 	0x000b // <user name>\Start Menu
CSIDL_MYDOCUMENTS 	CSIDL_PERSONAL // Personal was just a silly name for My Documents
CSIDL_MYMUSIC 	0x000d // "My Music" folder
CSIDL_MYVIDEO 	0x000e // "My Videos" folder
CSIDL_DESKTOPDIRECTORY 	0x0010 // <user name>\Desktop
CSIDL_DRIVES 	0x0011 // My Computer
CSIDL_NETWORK 	0x0012 // Network Neighborhood (My Network Places)
CSIDL_NETHOOD 	0x0013 // <user name>\nethood
CSIDL_FONTS 	0x0014 // windows\fonts
CSIDL_TEMPLATES 	0x0015
CSIDL_COMMON_STARTMENU 	0x0016 // All Users\Start Menu
CSIDL_COMMON_PROGRAMS 	0X0017 // All Users\Start Menu\Programs
CSIDL_COMMON_STARTUP 	0x0018 // All Users\Startup
CSIDL_COMMON_DESKTOPDIRECTORY 	0x0019 // All Users\Desktop
CSIDL_APPDATA 	0x001a // <user name>\Application Data
CSIDL_PRINTHOOD 	0x001b // <user name>\PrintHood
CSIDL_LOCAL_APPDATA 	0x001c // <user name>\Local Settings\Applicaiton Data (non roaming)
CSIDL_ALTSTARTUP 	0x001d // non localized startup
CSIDL_COMMON_ALTSTARTUP 	0x001e // non localized common startup
CSIDL_COMMON_FAVORITES 	0x001f
CSIDL_COMMON_APPDATA 	0x0023 // All Users\Application Data
CSIDL_WINDOWS 	0x0024 // GetWindowsDirectory()
CSIDL_SYSTEM 	0x0025 // GetSystemDirectory()
CSIDL_PROGRAM_FILES 	0x0026 // C:\Program Files
CSIDL_MYPICTURES 	0x0027 // C:\Program Files\My Pictures
CSIDL_PROFILE 	0x0028 // USERPROFILE
CSIDL_SYSTEMX86 	0x0029 // x86 system directory on RISC
CSIDL_PROGRAM_FILESX86 	0x002a // x86 C:\Program Files on RISC
CSIDL_PROGRAM_FILES_COMMON 	0x002b	 // C:\Program Files\Common
CSIDL_PROGRAM_FILES_COMMONX86 	0x002c 	// x86 Program Files\Common on RISC
CSIDL_COMMON_TEMPLATES 	0x002d 	// All Users\Templates
CSIDL_COMMON_DOCUMENTS 	0x002e 	// All Users\Documents
CSIDL_COMMON_ADMINTOOLS 	0x002f 	// All Users\Start Menu\Programs\Administrative Tools
CSIDL_ADMINTOOLS 	0x0030 	// <user name>\Start Menu\Programs\Administrative Tools
CSIDL_CONNECTIONS 	0x0031 	// Network and Dial-up Connections
CSIDL_COMMON_MUSIC 	0x0035 	// All Users\My Music
CSIDL_COMMON_PICTURES 	0x0036 	// All Users\My Pictures
CSIDL_COMMON_VIDEO 	0x0037 	// All Users\My Video
CSIDL_RESOURCES 	0x0038 	// Resource Direcotry




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值