SHGetSpecialFolderLocation获取开始文件夹

SHGetSpecialFolderLocation函数可以获取windows 特殊目录

函数原型:(MSDN官方链接:https://msdn.microsoft.com/en-us/library/bb762203(VS.85).aspx)

1 HRESULT SHGetSpecialFolderLocation(
2   _In_  HWND             hwndOwner,  // 保留值,填NULL
3   _In_  int              nFolder,   // 一个CSIDL标识的相应文件夹值
4   _Out_ PIDLIST_ABSOLUTE *ppidl    // 一个PIDL,指定相对于名称空间(桌面)根目录的文件夹位置。
5 );

如果此函数成功,则返回S_OK。否则,它将返回一个HRESULT错误代码。

函数所属:

Shlobj_core.h(包括Shlobj.h)

Shell32.lib

Shell32.dll

___________________________________________________________________________________________________________________

主要是第二个参数,一个CLSID,对应列表:(MSDN官方链接:https://msdn.microsoft.com/en-us/library/bb762494(v=vs.85).aspx)

恒/值描述
CSIDL_ADMINTOOLS FOLDERID_AdminTools

版本5.0。用于存储单个用户的管理工具的文件系统目录。MMC会将自定义的控制台保存到该目录中,并且会随用户漫游。

CSIDL_ALTSTARTUP FOLDERID_Startup

与用户的非本地化启动程序组对应的文件系统目录。此值在Windows Vista中被识别为向后兼容,但该文件夹本身不再存在。

CSIDL_APPDATA FOLDERID_RoamingAppData

版本4.71。作为应用程序特定数据的公共存储库的文件系统目录。典型的路径是C:\ Documents and Settings \ username \ Application Data。

CSIDL_BITBUCKET FOLDERID_RecycleBinFolder

包含用户回收站中对象的虚拟文件夹。

CSIDL_CDBURN_AREA FOLDERID_CDBurning

版本6.0。作为等待写入CD的文件的临时区域的文件系统目录。一个典型的路径是C:\ Documents and Settings \ 用户名 \ Local Settings \ Application Data \ Microsoft \ CD Burning。

CSIDL_COMMON_ADMINTOOLS FOLDERID_CommonAdminTools

版本5.0。包含计算机所有用户的管理工具的文件系统目录。

CSIDL_COMMON_ALTSTARTUP FOLDERID_CommonStartup

与所有用户的非本地化启动程序组相对应的文件系统目录。此值在Windows Vista中被识别为向后兼容,但该文件夹本身不再存在。

CSIDL_COMMON_APPDATA FOLDERID_ProgramData

版本5.0。包含所有用户的应用程序数据的文件系统目录。典型的路径是C:\ Documents and Settings \ All Users \ Application Data。该文件夹用于不是用户特定的应用程序数据。例如,应用程序可以将拼写检查字典,剪贴画数据库或日志文件存储在CSIDL_COMMON_APPDATA文件夹中。此信息不会漫游,并可供任何使用计算机的人使用。

CSIDL_COMMON_DESKTOPDIRECTORY FOLDERID_PublicDesktop

包含桌面上为所有用户显示的文件和文件夹的文件系统目录。典型的路径是C:\ Documents and Settings \ All Users \ Desktop。

CSIDL_COMMON_DOCUMENTS FOLDERID_PublicDocuments

包含所有用户共有文档的文件系统目录。典型的路径是C:\ Documents and Settings \ All Users \ Documents。

CSIDL_COMMON_FAVORITES FOLDERID_Favorites

文件系统目录,用作所有用户共同喜爱的项目的公共存储库。

CSIDL_COMMON_MUSIC FOLDERID_PublicMusic

版本6.0。作为所有用户共有的音乐文件存储库的文件系统目录。典型路径是C:\ Documents and Settings \ All Users \ Documents \ My Music。

CSIDL_COMMON_OEM_LINKS FOLDERID_CommonOEMLinks

此值在Windows Vista中被识别为向后兼容,但文件夹本身不再使用。

CSIDL_COMMON_PICTURES FOLDERID_PublicPictures

版本6.0。用作所有用户共有的图像文件存储库的文件系统目录。典型的路径是C:\ Documents and Settings \ All Users \ Documents \ My Pictures。

CSIDL_COMMON_PROGRAMS FOLDERID_CommonPrograms

包含为所有用户显示在“ 开始”菜单上的公共程序组的目录的文件系统目录。一个典型的路径是C:\ Documents and Settings \ All Users \ Start Menu \ Programs。

CSIDL_COMMON_STARTMENU FOLDERID_CommonStartMenu

包含为所有用户显示在“ 开始”菜单上的程序和文件夹的文件系统目录。典型的路径是C:\ Documents and Settings \ All Users \ Start Menu。

CSIDL_COMMON_STARTUP FOLDERID_CommonStartup

包含出现在所有用户的启动文件夹中的程序的文件系统目录。一个典型的路径是C:\ Documents and Settings \ All Users \ Start Menu \ Programs \ Startup。

CSIDL_COMMON_TEMPLATES FOLDERID_CommonTemplates

包含可供所有用户使用的模板的文件系统目录。典型的路径是C:\ Documents and Settings \ All Users \ Templates。

CSIDL_COMMON_VIDEO FOLDERID_PublicVideos

版本6.0。用作所有用户共有的视频文件存储库的文件系统目录。典型的路径是C:\ Documents and Settings \ All Users \ Documents \ My Videos。

CSIDL_COMPUTERSNEARME FOLDERID_NetworkFolder

表示工作组中其他计算机的文件夹。

CSIDL_CONNECTIONS FOLDERID_ConnectionsFolder

表示网络连接的虚拟文件夹,包含网络和拨号连接。

CSIDL_CONTROLS FOLDERID_ControlPanelFolder

包含控制面板应用程序的图标的虚拟文件夹。

CSIDL_COOKIES FOLDERID_Cookies

用作Internet Cookie公共存储库的文件系统目录。典型的路径是C:\ Documents and Settings \ username \ Cookies。

CSIDL_DESKTOP FOLDERID_Desktop

代表Windows桌面的虚拟文件夹,即命名空间的根。

CSIDL_DESKTOPDIRECTORY FOLDERID_Desktop

用于在桌面上物理存储文件对象的文件系统目录(不要与桌面文件夹本身混淆)。典型的路径是C:\ Documents and Settings \ username \ Desktop。

CSIDL_DRIVES FOLDERID_ComputerFolder

代表我的电脑的虚拟文件夹,包含本地计算机上的所有内容:存储设备,打印机和控制面板。该文件夹还可以包含映射的网络驱动器。

CSIDL_FAVORITES FOLDERID_Favorites

作为用户最喜爱的项目的公共存储库的文件系统目录。典型的路径是C:\ Documents and Settings \ username \ Favorites。

CSIDL_FONTS FOLDERID_Fonts

包含字体的虚拟文件夹。一个典型的路径是C:\ Windows \ Fonts。

CSIDL_HISTORY FOLDERID_History

用作Internet历史记录项目公共存储库的文件系统目录。

CSIDL_INTERNET FOLDERID_InternetFolder

Internet Explorer的虚拟文件夹。

CSIDL_INTERNET_CACHE FOLDERID_InternetCache

版本4.72。用作临时Internet文件公共存储库的文件系统目录。一个典型的路径是C:\ Documents and Settings \ username \ Local Settings \ Temporary Internet Files。

CSIDL_LOCAL_APPDATA FOLDERID_LocalAppData

版本5.0。作为本地(非漫游)应用程序的数据存储库的文件系统目录。一个典型的路径是C:\ Documents and Settings \ username \ Local Settings \ Application Data。

CSIDL_MYDOCUMENTS FOLDERID_Documents

版本6.0。代表我的文档桌面项目的虚拟文件夹。该值等同于CSIDL_PERSONAL

CSIDL_MYMUSIC FOLDERID_Music

用作音乐文件公共存储库的文件系统目录。一个典型的路径是C:\ Documents and Settings \ User \ My Documents \ My Music。

CSIDL_MYPICTURES FOLDERID_Pictures

版本5.0。用作图像文件公共存储库的文件系统目录。典型的路径是C:\ Documents and Settings \ username \ My Documents \ My Pictures。

CSIDL_MYVIDEO FOLDERID_Videos

版本6.0。作为视频文件公共存储库的文件系统目录。典型的路径是C:\ Documents and Settings \ username \ My Documents \ My Videos。

CSIDL_NETHOOD FOLDERID_NetHood

包含“ 网上邻居”虚拟文件夹中可能存在的链接对象的文件系统目录。它与表示网络名称空间根的CSIDL_NETWORK不同。典型的路径是C:\ Documents and Settings \ username \ NetHood。

CSIDL_NETWORK FOLDERID_NetworkFolder

代表网络邻居的虚拟文件夹,网络名称空间层次结构的根。

CSIDL_PERSONAL FOLDERID_Documents

版本6.0。代表我的文档桌面项目的虚拟文件夹。这相当于CSIDL_MYDOCUMENTS

在版本6.0之前。用于物理存储用户公共文档库的文件系统目录。典型的路径是C:\ Documents and Settings \ username \ My Documents。这应该与命名空间中的虚拟“ 我的文档”文件夹区分开来。要访问该虚拟文件夹,请使用SHGetFolderLocation,它返回虚拟位置的ITEMIDLIST,或者参考管理文件系统中描述的技术。

CSIDL_PRINTERS FOLDERID_PrintersFolder

包含已安装打印机的虚拟文件夹。

CSIDL_PRINTHOOD FOLDERID_PrintHood

包含Printers虚拟文件夹中可以存在的链接对象的文件系统目录。典型的路径是C:\ Documents and Settings \ username \ PrintHood。

CSIDL_PROFILE FOLDERID_Profile

版本5.0。用户的个人资料文件夹。典型的路径是C:\ Users \ username。应用程序不应在此级别创建文件或文件夹; 他们应该将他们的数据放在CSIDL_APPDATACSIDL_LOCAL_APPDATA引用的位置下。但是,如果要创建新的已知文件夹,则由CSIDL_PROFILE引用的配置文件根目录是适当的。

CSIDL_PROGRAM_FILES FOLDERID_ProgramFiles

版本5.0。Program Files文件夹。典型的路径是C:\ Program Files。

CSIDL_PROGRAM_FILESX86 FOLDERID_ProgramFilesX86
 
CSIDL_PROGRAM_FILES_COMMON FOLDERID_ProgramFilesCommon

版本5.0。跨应用程序共享的组件的文件夹。一个典型的路径是C:\ Program Files \ Common。仅适用于Windows XP。

CSIDL_PROGRAM_FILES_COMMONX86 FOLDERID_ProgramFilesCommonX86
 
CSIDL_PROGRAMS FOLDERID_Programs

包含用户程序组(其本身是文件系统目录)的文件系统目录。典型的路径是C:\ Documents and Settings \ username \ Start Menu \ Programs。

CSIDL_RECENT FOLDERID_Recent

包含用户最近使用文档的快捷方式的文件系统目录。一个典型的路径是C:\ Documents and Settings \ username \ My Recent Documents。要在此文件夹中创建快捷方式,请使用SHAddToRecentDocs。除了创建快捷方式外,此功能还会更新Shell的最近文档列表,并将快捷方式添加到“ 开始”菜单的“ 我的最近文档”子菜单中。

CSIDL_RESOURCES FOLDERID_ResourceDir

Windows Vista。包含资源数据的文件系统目录。典型的路径是C:\ Windows \ Resources。

CSIDL_RESOURCES_LOCALIZED FOLDERID_LocalizedResourcesDir
 
CSIDL_SENDTO FOLDERID_SendTo

包含“ 发送到”菜单项的文件系统目录。典型的路径是C:\ Documents and Settings \ username \ SendTo。

CSIDL_STARTMENU FOLDERID_StartMenu

包含“ 开始”菜单项的文件系统目录。一个典型的路径是C:\ Documents and Settings \ username \ Start Menu。

CSIDL_STARTUP FOLDERID_Startup

与用户的启动程序组对应的文件系统目录。只要关联用户登录,系统就会启动这些程序。一个典型的路径是C:\ Documents and Settings \ 用户名 \开始菜单\程序\启动。

CSIDL_SYSTEM FOLDERID_System

版本5.0。Windows系统文件夹。一个典型的路径是C:\ Windows \ System32。

CSIDL_SYSTEMX86 FOLDERID_SystemX86
 
CSIDL_TEMPLATES FOLDERID_Templates

作为文档模板公共存储库的文件系统目录。典型的路径是C:\ Documents and Settings \ username \ Templates。

CSIDL_WINDOWS FOLDERID_Windows

版本5.0。Windows目录或SYSROOT。这对应于%windir%或%SYSTEMROOT%环境变量。典型的路径是C:\ Windows。

 
CSIDL_FLAG_CREATE KF_FLAG_CREATE

版本5.0。结合另一个CSIDL强制创建关联的文件夹(如果它不存在)。

CSIDL_FLAG_DONT_UNEXPAND KF_FLAG_DONT_UNEXPAND

与另一个CSIDL常量组合以确保环境变量的扩展。

CSIDL_FLAG_DONT_VERIFY KF_FLAG_DONT_VERIFY

结合使用另一个CSIDL常量(CSIDL_FLAG_CREATE除外) ,以返回未验证的文件夹路径,而不尝试创建或初始化该文件夹。

CSIDL_FLAG_NO_ALIAS KF_FLAG_NO_ALIAS

与另一个CSIDL常量组合,以确保检索文件夹的真实系统路径,不含任何别名占位符,例如由SHGetFolderLocation返回的%USERPROFILE%。此标志对SHGetFolderPath返回的路径没有影响。

CSIDL_FLAG_PER_USER_INIT
 
CSIDL_FLAG_MASK

任何有效的CSIDL标志值的掩码。

 

调用例子,获取 开始菜单启动目录:

 1 #include <iostream>
 2 #include <Windows.h>
 3 #include <ShlObj.h>
 4 
 5 #pragma comment(lib,"shell32.lib")
 6 
 7 using namespace std;
 8 
 9 int main(void)
10 {
11     CHAR szDir[MAX_PATH] = { 0 };
12     LPITEMIDLIST pidl = NULL;
13     SHGetSpecialFolderLocation(NULL, CSIDL_COMMON_ALTSTARTUP, &pidl);
14     SHGetPathFromIDList(pidl, szDir);
15     cout << szDir << endl;
16     system("pause");
17     return 0;
18 }

图:

转载于:https://www.cnblogs.com/biaoge140/p/9030072.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值