获得程序自身目录及所有运行程序目录--上位机VC
获得程序自身目录及所有运行程序目录--上位机VC
功能展示
上位机程序开发时,时常要向指定目录的文件保存参数,如向自身同级目录下data文件夹时保存参数,那么我们就得以自身目录作为参考获得data文件夹的位置,以后用户不管将我们程序安装什么位置,我们开发的程序都能够正确的读写指定文件夹下文件。当前例程实现自身目录及全部运程程序目录的获取,效果如图,点击<获取全部运行程序目录>可罗列出全部运行中程序目录,点击<获得自身目录>可获得我们程序自己所在的目录 要点提示 程序自身完整路径的获取可以使用函数GetModuleFileName()实现,其原型为DWORD GetModuleFileName( HMODULE hModule, LPTSTR lpFilename, DWORD nSize ); hModule Long:一个模块的句柄。可以是一个DLL模块,或者是一个应用程序的实例句柄。如果该参数为NULL, 该函数返回该应用程序全路径。如d:\\gkbc8.exe lpFileName String:指定一个字串缓冲区,要在其中容纳文件的用NULL字符中止的路径名,hModule模块就是从这个文件装载进来的 nSize Long:装载到缓冲区lpFileName的最大字符数量
实现功能 1.新建基于对话框的应用程序
2.添加一列表控件,ID不变IDC_LIST1,添加两按钮获取全部运行程序目录,获得自身目录,关联两按钮的点击函数实现各自功能 - #include <tlhelp32.h>
- void CGkbc8Dlg::OnAllPath()
- {
- CListCtrl *pList = (CListCtrl *)GetDlgItem(IDC_LIST1);//列表指针获取
- pList->DeleteAllItems();//清空内容
- int nIndex=0;
- PROCESSENTRY32* pinfo=new PROCESSENTRY32;
- MODULEENTRY32* minfo=new MODULEENTRY32;
- pinfo->dwSize=sizeof(PROCESSENTRY32);
- minfo->dwSize=sizeof(MODULEENTRY32);
-
- CString sText;
- HANDLE hModule;
- char shortpath[MAX_PATH] = "";
- HANDLE hProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
- BOOL report =Process32First(hProcess,pinfo);
- while(report)
- {
- hModule=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pinfo->th32ProcessID);
- Module32First(hModule, minfo);
- sText.Format("%d",nIndex);
- pList->InsertItem(nIndex,"");
- pList->SetItemText(nIndex,0,sText);
- pList->SetItemText(nIndex,1,pinfo->szExeFile);
- pList->SetItemText(nIndex,2,minfo->szExePath);
-
- report=Process32Next(hProcess, pinfo);
- nIndex++;
- }
-
复制代码
- CloseHandle(hProcess);
- CloseHandle(hModule);
- }
- void CGkbc8Dlg::OnGetMe()
- {
- char cPath[_MAX_PATH];
- GetModuleFileName(NULL,cPath,_MAX_PATH);//获取程序自身路径如c:\\1.exe;
- CString sPath(cPath);
- sPath = sPath.Left(sPath.ReverseFind('\\')+1);//获得程序自身目录如c:\\;
- CListCtrl *pList = (CListCtrl *)GetDlgItem(IDC_LIST1);//列表指针获取
- int nCount = pList->GetItemCount();
- pList->InsertItem(nCount,"");
- pList->SetItemText(nCount,1,"自身程序");
- pList->SetItemText(nCount,2,sPath);
- //如果程序同级目录有其他文件夹如<data><cource>,可按如下获得
- sPath += "data";
- }
复制代码
3.列表控件在程序初始化动态修改为报表格式及添加表头 //<>加入表头 CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_LIST1); pList->ModifyStyle(0,LVS_REPORT,0); pList->InsertColumn(0,"索引",LVCFMT_LEFT,50); pList->InsertColumn(1,"名称",LVCFMT_LEFT,150); pList->InsertColumn(2,"目录",LVCFMT_LEFT,550);
我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|