1,目的
介绍获取Windows常用的一些系统路径的方法(当前用户),如:桌面、我的文档等。
并提供简单封装为类PathHelper,供以后工程快捷调用。
2,原理&实现
第一部分 常用系统及进程目录
①获取系统system32路径:(c:\windows\system32)
使用函数GetSystemDirectory. CString版封装:
- static CString GetSysFolder ()
- {
- TCHAR szPath[100] ={0};
- GetSystemDirectory( szPath, 100 ) ;
- return CString(szPath) ;
- }
②获取系统windows路径:(c:\windows)
- static CString GetWindowsFolder()
- {
- TCHAR szPath[100] ={0};
- GetWindowsDirectory( szPath, 100 ) ;
- return CString(szPath) ;
- }
③获取模块运行所在文件夹(exe所在目录)
- //获取运行目录(exe所在目录)
- static CString GetModuleFolder( HMODULE hModule )
- {
- TCHAR szPath[MAX_PATH] = {0} ;
- GetModuleFileName( hModule, szPath, MAX_PATH ) ;
- ZeroMemory(_tcsrchr(szPath,_T('\\')), _tcslen(_tcsrchr(szPath,_T('\\') ) )*sizeof(TCHAR)) ;
- return CString(szPath) ;
- }
④获取模块文件完整路径(包含exe文件名及后缀)
- //获取运行模块文件全路径
- static CString GetModuleFilePath( HMODULE hModule )
- {
- TCHAR szPath[MAX_PATH] = {0} ;
- GetModuleFileName( hModule, szPath, MAX_PATH ) ;
- return CString(szPath) ;
- }
⑤上级目录:
- //得到上一级目录
- static CString GetUpFolder(CString strPath)
- {
- int nPos = strPath.ReverseFind('\\');
- return strPath.Left(nPos);
- }
附:PathHelper 小工具类头文件:
- /*
- 提供简化的路径操作:如exe路径、系统路径、上级目录
- */
- #ifndef PATH_HELPER_H
- #define PATH_HELPER_H
- class PathHelper
- {
- public:
- PathHelper(){}
- ~PathHelper(){}
- //得到上一级目录
- static CString GetUpFolder(CString strPath)
- {
- int nPos = strPath.ReverseFind('\\');
- return strPath.Left(nPos);
- }
- //获取运行目录(exe所在目录)
- static CString GetModuleFolder( HMODULE hModule )
- {
- TCHAR szPath[MAX_PATH] = {0} ;
- GetModuleFileName( hModule, szPath, MAX_PATH ) ;
- ZeroMemory(_tcsrchr(szPath,_T('\\')), _tcslen(_tcsrchr(szPath,_T('\\') ) )*sizeof(TCHAR)) ;
- return CString(szPath) ;
- }
- //获取运行模块文件全路径
- static CString GetModuleFilePath( HMODULE hModule )
- {
- TCHAR szPath[MAX_PATH] = {0} ;
- GetModuleFileName( hModule, szPath, MAX_PATH ) ;
- return CString(szPath) ;
- }
- static CString GetSysFolder ()
- {
- TCHAR szPath[100] ={0};
- GetSystemDirectory ( szPath, 100 ) ;
- return CString(szPath) ;
- }
- static CString GetWindowsFolder()
- {
- TCHAR szPath[100] ={0};
- GetWindowsDirectory ( szPath, 100 ) ;
- return CString(szPath) ;
- }
- };
- #endif
第二部分 系统特殊路径
使用API:
BOOL SHGetSpecialFolderPath( HWND hwndOwner, LPTSTR lpszPath, int nFolder, BOOL fCreate );
参数说明:
HWND hwndOwner:如果在一个对话框或messagebox上显示时,用到的窗口句柄。这里我们单纯获取路径,一般设NULL。
LPTSTR lpszPath : 接收路径的字符串
int nFolder : 微软定义好的一个标志,用到代表要获取那种目录。
常见的如下:
- CSIDL_BITBUCKET 回收站
- CSIDL_CONTROLS 控制面板
- CSIDL_DESKTOP Windows 桌面Desktop
- CSIDL_DESKTOPDIRECTORY Desktop的目录
- CSIDL_DRIVES 我的电脑
- CSIDL_FONTS 字体目录
- CSIDL_NETHOOD 网上邻居
- CSIDL_NETWORK 网上邻居虚拟目录
- CSIDL_PERSONAL 我的文档
- CSIDL_PRINTERS 打印机
- CSIDL_PROGRAMS 程序组
- CSIDL_RECENT 最近打开的文档
- CSIDL_SENDTO “发送到”菜单项
- CSIDL_STARTMENU 任务条启动菜单项
- CSIDL_STARTUP 启动目录
- CSIDL_TEMPLATES 文档模板
具体内容可以参照 shlobj.h 。
BOOL fCreate : 如果该文件夹不存在,是否创建它。 一般我们不改系统文件夹,就设FASLE。
调用示例:
- CHAR szPath[MAX_PATH] = {0};
- SHGetSpecialFolderPath(NULL, szPath,CSIDL_DESKTOP, FALSE);
- MessageBox(szPath);
效果:
原文链接: https://www.cnblogs.com/wodehao0808/p/7388440.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/258547
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!