MFC調用外部EXE檔案

來源:互聯網
上載者:User

文章原址: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程式,退出後又回到了主程式繼續執行。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.