现在的位置: 首页 > 综合 > 正文

MFC调用外部EXE文件

2013年09月01日 ⁄ 综合 ⁄ 共 2295字 ⁄ 字号 评论关闭

文章原址:http://hi.baidu.com/%C0%D6%B5%C4%E3%B0%E2%EA/blog/item/287895f1a6f80b3dbc310910.html

在开发MFC应用程序的时候,如果要实现一个特定的功能,当然一般的做法就是添加一个处理这个功能的对话框,给对话框加上类,需要调用功能的时候就直接把对话框掉出来就行了。但是,如果那个功能在一个外部exe实现,而有没有那个exe文件的实现代码,怎么办?直接调用外部的那个exe文件就行了。。

方法一、(进程方式) 
STARTUPINFO   si; 
PROCESS_INFORMATION   pi; 
ZeroMemory(&si,sizeof(si)); 
si.cb = sizeof(si); 
ZeroMemory(&pi,sizeof(pi)); 
if(!CreateProcess(NULL, "E;\Test.exe ",NULL,NULL,FALSE,CREATE_NO_WINDOW,NULL,NULL,&si,&pi))   

        MessageBox( "出错 ", "提示 ",MB_OK|MB_ICONINFORMATION); 

WaitForSingleObject(pi.hProcess,INFINITE); 
CloseHandle(pi.hProcess); 
CloseHandle(pi.hThread); 
方法二、(线程方式) 
WinExec( "Test.Exe ",SW_HIDE);

Q: 如何打开一个应用程序?
ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW );

ShellExecute(this->m_hWnd,"open","notepad.exe",
    "c:\\MyLog.log","",SW_SHOW );
As you can see, I haven't passed the full path of the programs. 
 
Q: 如何打开一个同系统程序相关连的文档?
ShellExecute(this->m_hWnd,"open",
    "c:\\abc.txt","","",SW_SHOW );
 
Q: 如何打开一个网页?
ShellExecute(this->m_hWnd,"open",
    "http://hi.baidu.com/%C0%D6%B5%C4%E3%B0%E2%EA/home","","", SW_SHOW );
 
Q: 如何激活相关程序,发送EMAIL?
ShellExecute(this->m_hWnd,"open",
    "mailto:gongziya@gmail.com","","", SW_SHOW );
 
Q: 如何用系统打印机打印文档?
ShellExecute(this->m_hWnd,"print",
    "c:\\abc.txt","","", SW_HIDE);
 
Q: 如何用系统查找功能来查找指定文件?
ShellExecute(m_hWnd,"find","d:\\nish",
    NULL,NULL,SW_SHOW);

******************************************************************************

上面的两种方法是我贴的网易博客《MFC 调用EXE

******************************************************************************

现在写一个test.exe作为测试,源代码:

#include<iostream>

using namespace std;

int main()

{

    cout<<"\nHello World"<<endl;

    return 0;

}

测试程序:

#include <iostream>

#include <windows.h>

using namespace std;

int main()

{

    WinExec( "test.Exe ",   SW_HIDE);

return 0;

}

会发现调用确实起到了效果。
现在有一个EXE游戏BOX.exe(推箱子游戏),放在E盘的BOX文件夹下。然后新建MFC基于对话框应用程序,双击确定按钮,进入消息处理函数OnOK,编辑代码如下:

void CCREATE_PROCESS_DEMODlg::OnOK() 

{

STARTUPINFO si;   

PROCESS_INFORMATION pi;   

ZeroMemory( &si, sizeof(si) );   

si.cb = sizeof(si);   

ZeroMemory( &pi, sizeof(pi) );      

if(!CreateProcess(TEXT("E:\\BOX\\BOX.exe"), NULL, NULL, NULL,FALSE,0, NULL,  NULL, &si,  &pi))   

{   

MessageBox("没有找到","Title",MB_OK);

}  

WaitForSingleObject( pi.hProcess, INFINITE );     

CloseHandle( pi.hProcess );   

CloseHandle( pi.hThread );  

::MessageBox(NULL,"回到了主程序","正常返回",MB_OK);

CDialog::OnOK();

}

打开外部得exe程序,退出后又回到了主程序继续执行。

抱歉!评论已关闭.