【路径相关方法】1,获取各种系统路径

来源:互联网 发布:塞德里克·维拉尼 知乎 编辑:程序博客网 时间:2024/06/05 19:42

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_Hclass 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);
效果:







0 0