• windows的commonfiles


    // 需要 #include <Shlobj.h>
    	char path[255];
    	SHGetSpecialFolderPath(
    		NULL,							// 保留
    		path,							// 接受文件路径的字符串指针
    		CSIDL_DESKTOPDIRECTORY,			// CSIDL 宏
    		FALSE							// 如果文件夹不存在,则不创建文件夹
    	);cout << "path = " << path << endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    宏 介绍
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    参考:
    https://blog.csdn.net/Simon798/article/details/104068846

  • 相关阅读:
    浅谈系统架构设计-从架构设计原理、架构设计原则、架构设计方法展开
    sql跨表查询的三种方案
    C primer plus学习笔记 —— 5、指针
    NICE-SLAM——论文简析
    书客护眼台灯好用吗?书客、柏曼、飞利浦多维度测评
    亿万级分库分表后如何进行跨表分页查询
    SpringBoot统一返回值和统一异常处理
    API学习总结
    React fiber分片的理解和剖析
    Vue----属性侦听器
  • 原文地址:https://blog.csdn.net/weixin_41167925/article/details/125527199