获取程序运行路径


使用函数GetModuleFileName就可以实现想要的功能了。

摘抄一下百度百科的东西:

获取当前进程已加载模块的文件的完整路径,该模块必须由当前进程加载。

DWORD WINAPIGetModuleFileName(

    _In_opt_ HMODULE hModule,

    _Out_    LPTSTR lpFilename,

    _In_     DWORD nSize

);

返回值:

Long,如执行成功,返回复制到lpFileName的实际字符数量;零表示失败。使用GetLastError可以打印错误信息。

参数:

hModuleLong

一个模块的句柄。可以是一个DLL模块,或者是一个应用程序的实例句柄。如果该参数为NULL,

该函数返回该应用程序全路径。

lpFileNameString

指定一个字串缓冲区,要在其中容纳文件的用NULL字符中止的路径名,hModule模块就是从这个文件装载进来的

nSizeLong

装载到缓冲区lpFileName的最大字符数量

 

 

使用案例如下:

wchar_tcxPath[MAX_PATH];//用来装载路径的变量,类型要是Wchar_t才可以

 

GetModuleFileName(NULL,cxPath,MAX_PATH);//调用函数

 

//从这里开始,实现wchar_t到char* 的类型转换,因为无法直接实现wchar_t到String的转换

         DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,cxPath,-1,NULL,0,NULL,FALSE);

         char *path=new char[dwNum];

         WideCharToMultiByte(CP_OEMCP,NULL,cxPath,-1,path,dwNum,NULL,FALSE);

 

//好转换完成

 

         String^path_1=gcnew String(path);//char*到String的转换

//比如说,在E:\程序    的目录下有运行的程序,那么路径名就是:E:\程序  ,如果想要直接用来打开文件的话,还需要将  \   转换为   \\,然后加上要打开的文件路径,比如想要打开E:\程序\1.txt  的话,步骤就是 

     E:\程序(调用函数的结果)    ->    E:\\程序(将  \   转换为   \\  ) - >       E:\\程序\\1.txt

 

//下面是实现将  \   转换为   \\)

         Int32 mark=path_1->LastIndexOf('\\');//有两个 // 是因为 / 是语义符,需要添加\来转义,具体请阅读教材上p10

   path_1=path_1->Remove(mark+1,path_1->Length-mark-1);

         path_1=path_1->Replace("\\","\\\\");

 

到这里就完成了路径的获取了。那么接下来可以加上程序中需要用到文件的路径,就不必在使用程序时将文件解压到特定的路径下了。

 

 

 

可以借助一款叫AdvancedInstaller 的软件将程序和文件打包,制作成安装程序。(可百度下载和看教程,比较容易上手)如此一来,就可以让用户自行选择安装路径了。

效果如下

 欢迎拍砖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值