VC6.0利用CreateProcess创建子进程,MFC调用Win32生成的.exe文件为例
2014-11-06 18:47
561 查看
本文主要讲一下如何利用MFC调用Win32的可执行文件(.exe)。
在此之前,简单了解一下CreateProcess函数。该函数的
BOOL CreateProcess
(
LPCTSTR lpApplicationName,//可执行文件的绝对路径,如:“F:\工程项目\proj1\Debug\test.exe”,当然也可以是相对路径,但是本人建议最好用绝对路径,并且通过简单程序编程容易得到绝对路径。
LPTSTR lpCommandLine, //该字符指定要执行的命令行(由于本文调用的是.exe文件,故设为“NULL”)
LPSECURITY_ATTRIBUTES lpProcessAttributes, //通常设置为NULL
LPSECURITY_ATTRIBUTES lpThreadAttributes, //通常设置为NULL
BOOL bInheritHandles, //通常设置为FALSE
DWORD dwCreationFlags, //通常设置为0
LPVOID lpEnvironment, //通常设置为NULL
LPCTSTR lpCurrentDirectory, //通常设置为NULL
LPSTARTUPINFO lpStartupInfo, //指向一个用于决定新进程的主窗体如何显示STARTUPINFO结构体。STARTUPINFO属性需要设置,后面会具体介绍
LPPROCESS_INFORMATIONlpProcessInformation //指向一个用来接收新进程的识别信息的PROCESS_INFORMATION结构体。
)
STARTUPINFO结构体,这里我只讲一下常用的几个参数。
typedef struct _STARTUPINFO {
DWORD cb; //一般直接赋值:sizeof(STARTUPINFO)
LPTSTR lpReserved;//通常设置为NULL
LPTSTR lpDesktop; //通常设置为NULL
LPTSTR lpTitle; //子进程窗口的名称的字符串
DWORD dwX;
DWORD dwY;
DWORD dwXSize;
DWORD dwYSize;
DWORD dwXCountChars;
DWORD dwYCountChars;
DWORD dwFillAttribute;
DWORD dwFlags; //这个参数非常重要,详见百度百科http://baike.baidu.com/view/2254534.htm?fr=aladdin
//因为本程序中,想要显示子进程.exe在DOS界面中的输出文字,故设置为STARTF_USESHOWWINDOW
WORD wShowWindow;//设置为SW_SHOW
WORD cbReserved2;//设为0
LPBYTE lpReserved2;//设为NULL
HANDLE hStdInput;
HANDLE hStdOutput;
HANDLE hStdError;
} STARTUPINFO, *LPSTARTUPINFO
举例说明
在此之前,简单了解一下CreateProcess函数。该函数的
BOOL CreateProcess
(
LPCTSTR lpApplicationName,//可执行文件的绝对路径,如:“F:\工程项目\proj1\Debug\test.exe”,当然也可以是相对路径,但是本人建议最好用绝对路径,并且通过简单程序编程容易得到绝对路径。
LPTSTR lpCommandLine, //该字符指定要执行的命令行(由于本文调用的是.exe文件,故设为“NULL”)
LPSECURITY_ATTRIBUTES lpProcessAttributes, //通常设置为NULL
LPSECURITY_ATTRIBUTES lpThreadAttributes, //通常设置为NULL
BOOL bInheritHandles, //通常设置为FALSE
DWORD dwCreationFlags, //通常设置为0
LPVOID lpEnvironment, //通常设置为NULL
LPCTSTR lpCurrentDirectory, //通常设置为NULL
LPSTARTUPINFO lpStartupInfo, //指向一个用于决定新进程的主窗体如何显示STARTUPINFO结构体。STARTUPINFO属性需要设置,后面会具体介绍
LPPROCESS_INFORMATIONlpProcessInformation //指向一个用来接收新进程的识别信息的PROCESS_INFORMATION结构体。
)
STARTUPINFO结构体,这里我只讲一下常用的几个参数。
typedef struct _STARTUPINFO {
DWORD cb; //一般直接赋值:sizeof(STARTUPINFO)
LPTSTR lpReserved;//通常设置为NULL
LPTSTR lpDesktop; //通常设置为NULL
LPTSTR lpTitle; //子进程窗口的名称的字符串
DWORD dwX;
DWORD dwY;
DWORD dwXSize;
DWORD dwYSize;
DWORD dwXCountChars;
DWORD dwYCountChars;
DWORD dwFillAttribute;
DWORD dwFlags; //这个参数非常重要,详见百度百科http://baike.baidu.com/view/2254534.htm?fr=aladdin
//因为本程序中,想要显示子进程.exe在DOS界面中的输出文字,故设置为STARTF_USESHOWWINDOW
WORD wShowWindow;//设置为SW_SHOW
WORD cbReserved2;//设为0
LPBYTE lpReserved2;//设为NULL
HANDLE hStdInput;
HANDLE hStdOutput;
HANDLE hStdError;
} STARTUPINFO, *LPSTARTUPINFO
举例说明
char sPath[200] ="\0"; //创建一个字符数组,用于存放可执行文件的绝对路径 GetModuleFileNameA(NULL,sPath,200);//获得当前主程序的工作空间 char *fp = sPath; int i=0; while(*fp!=NULL) //寻找到Debug文件夹,因为原来的.exe文件是与Debug相同的存放路径 { if(*fp=='\\'&&*(fp+1) =='D'&&*(fp+2)=='e'&&*(fp+3)=='b'&&*(fp+4)=='u'&&*(fp+5)=='g'&&*(fp+6)=='\\') { sPath[i]=0; } else { fp++; i++; } } strcat(sPath,"\\test_42.exe"); //获得可执行文件test_42.exe的完整路径 STARTUPINFO startupinfo; //创建STARTUPINFO结构变量startupinfo PROCESS_INFORMATION pinfo; //创建PROCESS_INFORMATION变量pinfo startupinfo.cb = sizeof(STARTUPINFO); startupinfo.lpReserved = NULL; startupinfo.lpDesktop = NULL; startupinfo.lpTitle = "42#测试"; startupinfo.dwFlags = STARTF_USESHOWWINDOW; startupinfo.cbReserved2 = 0; startupinfo.lpReserved2 = NULL; startupinfo.wShowWindow = SW_SHOW; BOOL bSuccess = CreateProcess(sPath, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &startupinfo, &pinfo ); WaitForSingleObject(pinfo.hProcess,INFINITE);//等待子进程结束 CloseHandle(pinfo.hProcess); CloseHandle(pinfo.hThread); //关闭子进程
相关文章推荐
- VC6.0 MFC创建OCX入门-详细完整流程(JS调用测试, 去除安全提示, exe打包)
- 利用数据库,生成一个.net 调用的类文件(只支持对一个表操作的类)
- 在程序中直接调用EXE文件 CreateProcess
- 1.1-学习Opencv与MFC混合编程之---利用画图函数,生成视频,并写入视频文件
- 【转】用VC6.0创建和调用win32 dll
- 1.1-学习Opencv与MFC混合编程之---利用画图函数,生成视频,并写入视频文件
- 利用Eclipse和JSmooth生成java EXE可执行文件 (转)
- 利用Eclipse和JSmooth生成java EXE可执行文件
- 利用 mgmtclassgen.exe 生成 WMI Win32_NetworkAdapter 包装类.
- 用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口
- VC6.0更改生成的exe文件图标
- 利用Eclipse和JSmooth生成java EXE可执行文件
- 利用MFC的CFileDialog生成Windows2000文件对话框
- c#调用exe文件利用.bat文件
- java利用exe4j生成exe可执行文件
- VC6.0更改生成的exe文件图标
- C# 利用自带xsd.exe工具操作XML-如通过XML生成xsd文件
- VC6.0更改生成的exe文件图标
- C# 利用自带xsd.exe工具操作XML-如通过XML生成xsd文件
- MFC 生成 exe文件的图标更改方法(转)