vc获取本程序文件路径,并打开本文件夹另一个EXE

vc获取本程序文件路径,并打开本文件夹另一个EXE,第1张

#include <iostream>

#include <windows.h> // 这个必须要有 

#include <string> // 字符串处理函数 

using namespace std

int main() {

    char szFileName[256] = "" // 待会存完整路径 

    string strAnotherExe = "pipe.exe" // 要执行的另外一个exe的名称 

    

    // 获得程序的运行路径,包含本程序名 

    GetModuleFileNameA(NULL, szFileName, 256)

    string strFileName = szFileName // 用string处理比较方便

    

    // 删掉本程序名,只保留路径

    size_t slashIndex = strFileName.rfind('\\')

    strFileName.erase(slashIndex+1)

    

    // 拼接要启动的程序的完整文件名

    strFileName += strAnotherExe

    cout<<"Another exe path : "<<strFileName<<endl

    

    // 在当前程序中启动外部程序,输出会进入本程序

    //system(strFileName.c_str()) 

    // 在新的窗口中打开外部程序

    strFileName = "start "+strFileName

    system(strFileName.c_str())

    

    return 0

}

主要思路是GetModuleFileNameA获得程序运行时的绝对路径,包含程序名。

因此只要删掉程序名,然后拼接上另外的一个程序名就可以了。

用system("程序名")可以启动一个子进程,然后主进程卡在system处,等子进程结束,主进程才继续往下走。

用system("start 程序名")可以在新窗口中打开进程,不等子进程结束,主进程就继续往下走。

PS:如果编译器提示没有system函数,请包含stdlib.h头文件。

OpenFileDialog Diag = new OpenFileDialog()

Diag.ShowDialog()

上面是选择程序的代码

选择反程序之后的 Diag.FileName就是你这个程序的路径

//Diag.FileName

int GetProgramPathDir( char *szPath, const UINT nSize )

{

char szExePath[ MAX_PATH ] //exe路径

char *pTemp = NULL //指针

if( NULL == szPath || nSize <1 )

{

return -2

}

memset( szExePath, 0, sizeof( szExePath ))

int nRetSize = GetModuleFileNameA( NULL, szExePath, MAX_PATH )

if( 0 == nRetSize )

{

return -1

}

if( nRetSize == MAX_PATH &&GetLastError() == ERROR_INSUFFICIENT_BUFFER )

{

return -3

}

pTemp = strrchr( szExePath, '\\' )

if( pTemp )

{

*pTemp = '\0'

}

if( strlen( szExePath ) >nSize )

{

return -3

}

strncpy_s( szPath, nSize, szExePath, nSize )

return 0

}

使用该函数获取exe文件目录。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7859672.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存