QQ登录

只需一步,快速开始

获得程序自身目录及所有运行程序目录--上位机VC

[ 复制链接 ]

获得程序自身目录及所有运行程序目录--上位机VC

获得程序自身目录及所有运行程序目录--上位机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,添加两按钮获取全部运行程序目录,获得自身目录,关联两按钮的点击函数实现各自功能
  1. #include <tlhelp32.h>
  2. void CGkbc8Dlg::OnAllPath()
  3. {
  4.         CListCtrl *pList = (CListCtrl *)GetDlgItem(IDC_LIST1);//列表指针获取
  5.         pList->DeleteAllItems();//清空内容
  6.         int nIndex=0;
  7.         PROCESSENTRY32* pinfo=new PROCESSENTRY32;
  8.         MODULEENTRY32*  minfo=new MODULEENTRY32;
  9.         pinfo->dwSize=sizeof(PROCESSENTRY32);
  10.         minfo->dwSize=sizeof(MODULEENTRY32);
  11.         

  12.         CString sText;
  13.         HANDLE hModule;
  14.         char shortpath[MAX_PATH] = "";
  15.         HANDLE hProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);        
  16.         BOOL   report  =Process32First(hProcess,pinfo);
  17.         while(report)
  18.         {
  19.                 hModule=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pinfo->th32ProcessID);
  20.                 Module32First(hModule, minfo);

  21.                 sText.Format("%d",nIndex);
  22.                 pList->InsertItem(nIndex,"");
  23.                 pList->SetItemText(nIndex,0,sText);
  24.                 pList->SetItemText(nIndex,1,pinfo->szExeFile);
  25.                 pList->SetItemText(nIndex,2,minfo->szExePath);
  26.                
  27.                 report=Process32Next(hProcess, pinfo);
  28.                 nIndex++;
  29.         }
  30.         
复制代码

  1.         CloseHandle(hProcess);
  2.         CloseHandle(hModule);
  3. }

  4. void CGkbc8Dlg::OnGetMe()
  5. {
  6.         char cPath[_MAX_PATH];
  7.         GetModuleFileName(NULL,cPath,_MAX_PATH);//获取程序自身路径如c:\\1.exe;
  8.         CString sPath(cPath);
  9.         sPath = sPath.Left(sPath.ReverseFind('\\')+1);//获得程序自身目录如c:\\;
  10.         CListCtrl *pList = (CListCtrl *)GetDlgItem(IDC_LIST1);//列表指针获取
  11.         int nCount = pList->GetItemCount();
  12.         pList->InsertItem(nCount,"");
  13.         pList->SetItemText(nCount,1,"自身程序");
  14.         pList->SetItemText(nCount,2,sPath);
  15.         //如果程序同级目录有其他文件夹如<data><cource>,可按如下获得
  16.         sPath += "data";
  17. }
复制代码

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);



我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:获得程序自身目录及所有运行程序目录--上位机VC.txt 
文件大小:48 Bytes  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  

回复

使用道具 举报

快速回复 返回列表 客服中心 搜索