[C++][windows]获取桌面路径用户路径exe所在目录
AI代码解释请注意SHGetSpecialFolderPath函数我们只需要修改一些宏即可获取不同目录,以下是宏定义宏介绍CSIDL_ADMINTOOLS、CSIDL_COMMON_ADMINTOOLS管理工具CSIDL_ALTSTARTUP、 CSIDL_COMMON_STARTUP、CSIDL_STARTUP程序 - 启动CSIDL_APPDATAAppDataCSIDL_CDBURN_ARE
AI代码解释
#include <iostream>
#include <windows.h>
#include <Shlobj.h>
#include <string>
#pragma comment(lib, "shell32.lib")
/******************************************************************************************
Function: TCHAR2STRING
Description: TCHAR转string
Input: str:待转化的TCHAR*类型字符串
Return: 转化后的string类型字符串
*******************************************************************************************/
std::string TCHAR2STRING(TCHAR* str)
{
std::string strstr;
try
{
int iLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
char* chRtn = new char[iLen * sizeof(char)];
WideCharToMultiByte(CP_ACP, 0, str, -1, chRtn, iLen, NULL, NULL);
strstr = chRtn;
}
catch (std::exception e)
{
}
return strstr;
}
std::string GetUserFolder()
{
TCHAR path[255];
SHGetSpecialFolderPath(0, path, CSIDL_PROFILE, 0);
std::string rlt = TCHAR2STRING(path);
return rlt;
}
std::string GetDesktopFolder()
{
TCHAR path[255];
//获取当前用户的桌面路径
SHGetSpecialFolderPath(0, path, CSIDL_DESKTOPDIRECTORY, 0);
std::string rlt=TCHAR2STRING(path);
return rlt;
}
//获取程序exe所在路径,字符最后没有斜杠
std::string GetExePath()
{
char szFilePath[MAX_PATH + 1] = { 0 };
GetModuleFileNameA(NULL, szFilePath, MAX_PATH);
/*
strrchr:函数功能:查找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置),
并返回这个位置的地址。如果未能找到指定字符,那么函数将返回NULL。
使用这个地址返回从最后一个字符c到str末尾的字符串。
*/
(strrchr(szFilePath, '\\'))[0] = 0; // 删除文件名,只获得路径字串//
std::string path = szFilePath;
return path;
}
int main()
{
std::string res= GetUserFolder();
std::cout << res << "\n";
return 0;
}
请注意SHGetSpecialFolderPath函数我们只需要修改一些宏即可获取不同目录,以下是宏定义
|
宏 |
介绍 |
|---|---|
|
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 |
更多推荐



所有评论(0)