首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[C++][windows]获取桌面路径用户路径exe所在目录

[C++][windows]获取桌面路径用户路径exe所在目录

作者头像
云未归来
发布2025-07-20 11:22:36
发布2025-07-20 11:22:36
16200
代码可运行
举报
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
复制
#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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档