• 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

  • 相关阅读:
    内存管理总结
    平板第三方电容笔怎么样?便宜的ipad触控笔推荐
    学内核之十二:从slab内存管理想到的
    DA2--获取网站用户数据集的大小
    Spring漏洞综合利用
    园子周边第2季:更大的鼠标垫,没有logo的鼠标垫
    【Linux】Shell脚本(文件操作)
    内存泄漏、new、delete
    分享自己平时使用的socket多客户端通信的代码技术点和软件使用
    Spring中的事务与事务传播机制
  • 原文地址:https://blog.csdn.net/weixin_41167925/article/details/125527199