209上位机VC MFC获取系统目录及程序自身目录
209上位机VC MFC获取系统目录及程序自身目录 功能展示 程序开发中时常要向系统的特殊目录复制文件,比如要将程序安装到program files目录里,要向system32目录复制文件,我们就得用代码获取这些目录路径,当前例程实现常用目录的获取如程序自身目录,系统程序安装目录,WINDOW目录,SYSTEM32目录,效果如图; 要点提示 一.系统的任何特殊目录都可以用函数SHGetSpecialFolderPath()获取;SHGetSpecialFolderPath函数原型 :ulongSHGetSpecialFolderPath(long hwndOwner,ref string lpszPath,int nFolder,booleanfCreate ) 参数说明: hwndOwner :可用GetDesktopWindowAPI取一个窗口句柄。或直接传null. lpszPath:返回路径的缓冲区 nFolder:标识代号 fCreate:true :如果文件夹不存在则创建,false:不创建; 参数nFolder的取值有很多,不同的取值,参数lpszPath得到的目录都不一样,如nFolder =CSIDL_DESKTOP时lpszPath为桌面目录; 二.程序自身的目录获取可以用函数GetModuleFileName(); 函数原型WORD GetModuleFileName(HMODULE hModule, LPTSTR lpFilename, DWORD nSize); 参数定义: HMODULE hModule 装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径。 LPTSTR lpFileName 是你存放返回的名字的内存块的指针,是一个输出参数 DWORD nSize,装载到缓冲区lpFileName的最大值; 如果函数失败,返回值将为0,可以用函数GetLastError可获得具体的异常代码 实现功能 1.新建基于对话框的应用程序 2.拖拽一列表框ID为IDC_LIST1,用于显示获取的目录; 依次拖拽按钮控件<本程序目录><本程序目录1 >< SYSTEM目录>< WINDOW目录><程序安装目录>关联函数实现相对应功能,程序安装目录指的是系统默认的程序安装目录如C:\\programe files; 按钮代码函数体为: - void CGkbc8Dlg::OnMypath()
- {
- m_List.ResetContent();//清空内容
- m_List.SetHorizontalExtent(600);//让过长内容可见
- //<>
- char path[MAX_PATH];
- GetCurrentDirectory(MAX_PATH,path);//自身目录获取方法1
- m_List.InsertString(0,path);//写入列表框
- ShellExecute(NULL,"Open",path,NULL,NULL,SW_SHOWNORMAL);//打开文件夹
- }
- void CGkbc8Dlg::OnMypath1()
- {
- char ch[MAX_PATH];
- GetModuleFileName(NULL,ch,MAX_PATH);
- CString sPath(ch);
- sPath = sPath.Left(sPath.ReverseFind('\\'));
- m_List.InsertString(0,sPath);//写入列表框
- ShellExecute(NULL,"Open",sPath,NULL,NULL,SW_SHOWNORMAL);//打开文件夹
- }
复制代码- void CGkbc8Dlg::OnSystem()
- {
- char cPath[MAX_PATH];
- GetSystemDirectory(cPath,MAX_PATH);
- m_List.InsertString(0,cPath);//写入列表框
- ShellExecute(NULL,"Open",cPath,NULL,NULL,SW_SHOWNORMAL);//打开文件夹
- }
- void CGkbc8Dlg::OnWindow()
- {
- char cPath[MAX_PATH];
- GetWindowsDirectory(cPath,MAX_PATH);
- m_List.InsertString(0,cPath);//写入列表框
- ShellExecute(NULL,"Open",cPath,NULL,NULL,SW_SHOWNORMAL);//打开文件夹
- }
- void CGkbc8Dlg::OnProgram()
- {
- TCHAR cPath[MAX_PATH];
- SHGetSpecialFolderPath(NULL,cPath,CSIDL_DESKTOP, FALSE);//桌面目录
- m_List.InsertString(0,cPath);//写入列表框
- ShellExecute(NULL,"Open",cPath,NULL,NULL,SW_SHOWNORMAL);//打开文件夹
- //
- SHGetSpecialFolderPath(NULL,cPath,0X0026, FALSE);//CSIDL_PROGRAM_FILES---0X0026
- m_List.InsertString(0,cPath);//写入列表框
- ShellExecute(NULL,"Open",cPath,NULL,NULL,SW_SHOWNORMAL);//
- }
复制代码我们来演示下功能实现的整个过程
|