1. 程式人生 > >MFC在退出主程式時關閉外部應用程式

MFC在退出主程式時關閉外部應用程式

最近在使用MFC呼叫外部exe應用程式,想在退出主程式的同時將外部應用程式關閉。於是在網上找到了這篇文章進行參考http://blog.sina.com.cn/s/blog_673ccb5b0101acp1.html,具體程式碼如下:

void CloseProgram(CString strProgram)
{
    HANDLE handle; //定義CreateToolhelp32Snapshot系統快照控制代碼
    HANDLE handle1; //定義要結束程序控制代碼
    handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//獲得系統快照控制代碼
    PROCESSENTRY32 *info; //定義PROCESSENTRY32結構字指
    //PROCESSENTRY32 結構的 dwSize 成員設定成 sizeof(PROCESSENTRY32)

    info = new PROCESSENTRY32;
    info->dwSize = sizeof(PROCESSENTRY32);
    //呼叫一次 Process32First 函式,從快照中獲取程序列表
    Process32First(handle, info);
    //重複呼叫 Process32Next,直到函式返回 FALSE 為止
    while(Process32Next(handle, info) != FALSE)
    {  
        CString strTmp = info->szExeFile;     //指向程序名字  
        if (strProgram.CompareNoCase(info->szExeFile) == 0 )  
        {  
            //PROCESS_TERMINATE表示為結束操作開啟,FALSE=可繼承,info->th32ProcessID=程序ID   
            handle1 = OpenProcess(PROCESS_TERMINATE, FALSE, info->th32ProcessID);
            //結束程序   
            TerminateProcess(handle1, 0);   
        }  
    }
    delete info;

    CloseHandle(handle);
}

其中使用CreateToolhelp32Snapshot函式時需要包含標頭檔案“windows.h”與"tlhelp32.h",最好按這個先後順序包含,調換順序後是否有影響我並沒有嘗試,有興趣可以嘗試一下,傳入的引數是需要外部應用程式名稱即可,不需要全路徑。如MFC主程式呼叫了notebook.exe程式,則只需CloseProgram(L“notebook.exe”)。

同時在需要實現在退出主程式時關閉外部應用程式,應在主程式的OnCancel函式中呼叫該函式即可實現該功能