// 需要 #include <Shlobj.h>
char path[255];
SHGetSpecialFolderPath(
NULL, // 保留
path, // 接受文件路径的字符串指针
CSIDL_DESKTOPDIRECTORY, // CSIDL 宏
FALSE // 如果文件夹不存在,则不创建文件夹
);cout << "path = " << path << endl;
宏 介绍
CSIDL_ADMINTOOLS、CSIDL_COMMON_ADMINTOOLS 管理工具
CSIDL_ALTSTARTUP、 CSIDL_COMMON_STARTUP、CSIDL_STARTUP 程序 - 启动
CSIDL_APPDATA AppData
CSIDL_CDBURN_AREA 临时刻录文件夹
CSIDL_COMMON_TEMPLATES、CSIDL_TEMPLATES Templates
CSIDL_COMMON_APPDATA ProgramData
CSIDL_COMMON_DESKTOPDIRECTORY、CSIDL_DESKTOP、CSIDL_DESKTOPDIRECTORY 桌面
CSIDL_COMMON_DOCUMENTS、CSIDL_MYDOCUMENTS、CSIDL_PERSONAL 文档
CSIDL_COMMON_FAVORITES、CSIDL_FAVORITES 收藏夹
CSIDL_COMMON_MUSIC、CSIDL_MYMUSIC 音乐
CSIDL_COMMON_PICTURES、CSIDL_MYPICTURES 图片
CSIDL_COMMON_PROGRAMS、CSIDL_PROGRAMS 开始菜单 - 程序
CSIDL_COMMON_STARTMENU、CSIDL_STARTMENU 开始菜单
CSIDL_COMMON_VIDEO 、CSIDL_MYVIDEO 视频
CSIDL_COOKIES INetCookies
CSIDL_FONTS 字体
CSIDL_HISTORY 历史
CSIDL_INTERNET_CACHE INetCache
CSIDL_LOCAL_APPDATA AppData/Local
CSIDL_NETHOOD Network Shortcuts
CSIDL_PRINTHOOD Printer Shortcuts
CSIDL_PROFILE 当前用户(Administrator)
CSIDL_PROGRAM_FILES 、CSIDL_PROGRAM_FILESX86 Program Files
CSIDL_PROGRAM_FILES_COMMON、CSIDL_PROGRAM_FILES_COMMONX86 Common Files
CSIDL_RECENT 最近使用的项目
CSIDL_RESOURCES Resources
CSIDL_SENDTO 发送到
CSIDL_SYSTEM System32
CSIDL_SYSTEMX86 SysWOW64
CSIDL_WINDOWS Windows
获取common files的时候建议从注册表获取
//获取common files文件夹的位置judge 为1为programe file下的common files judge为0 为program files(x86)下的common file
void GetCommonFiles(bool judge, std::string& outPath)
{
char cmdLine[MAX_PATH];
ZeroMemory(cmdLine, MAX_PATH);
DWORD dwcount = 255;
HKEY hKey;
long ret1 = 0;
ret1 = ::RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion", 0, KEY_QUERY_VALUE | KEY_WOW64_64KEY, &hKey);
if (ret1 != ERROR_SUCCESS)
{
::RegCloseKey(hKey);
return;
}
else
{
DWORD resultDword{ 0 };
if (judge)
{
::RegQueryValueExA(hKey, "ProgramFilesDir", NULL, NULL, (BYTE*)&cmdLine[0], &dwcount);
}
else
{
::RegQueryValueExA(hKey, "ProgramFilesDir (x86)", NULL, NULL, (BYTE*)&cmdLine[0], &dwcount);
}
}
ZeroMemory(cmdLine + strlen(cmdLine), MAX_PATH - dwcount);
RegCloseKey(hKey);
outPath += cmdLine;
}
参考:
https://blog.csdn.net/Simon798/article/details/104068846