工控编程吧
标题:
获得程序自身目录及所有运行程序目录--上位机VC
[打印本页]
作者:
qq263946146
时间:
2016-11-25 19:24
标题:
获得程序自身目录及所有运行程序目录--上位机VC
(, 下载次数: 1)
上传
点击文件名下载附件
获得程序自身目录及所有运行程序目录--上位机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);
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/962bd68a62e5b9ca76dfdeb90a4a679f/0/0/w_19run77rc5.swf-albumId=6822964809-tvId=6822964809-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[weixinlianxi]1[/weixinlianxi]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4