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

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







  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆枫゛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值