在mfc程式中啟用另一個已存在的程式
在主程式上添加了呼叫另一個輔助工具程式的按鈕,每按一次都會開啟一個新的輔助工具程式例項,這樣看起立很彆扭。舒服一些的作法應該是:在已經開啟一個程式例項的情況下,啟用這個例項;在沒有已開啟例項的情況下,建立一個新例項。建立新例項很簡單,就不多說了。這裡說一下啟用已存在的程式例項的方法。
//回撥函式,被傳送給EnumWIndows做引數
BOOL CALLBACK EnumWindowProc(HWND hWnd, LPARAM lParam)
{
DWORD dwPID;
GetWindowThreadProcessId(hWnd, &dwPID);
//程序ID相符
if(lParam == dwPID)
{
HWND hSubWnd = ::GetLastActivePopup(hWnd);
::ShowWindow(hWnd, SW_SHOW);
::SetForegroundWindow(hSubWnd);
return FALSE;
}
else
{
return TRUE;
}
}
//呼叫該函式啟用另一個程式例項,引數為另一個程式的程序ID,這個程序ID在建立程序時獲得。
BOOL ActivateProcess(DWORD dwProcessID)
{
return EnumWindows(EnumWindowProc, (LPARAM)dwProcessID);
}
在建立子程序時,注意保留其程序ID,當需要啟用該程序時,呼叫ActivateProcess函式,將程序ID做引數傳遞過去,就可以啟用該子程序了。效果就是子程序的視窗啪的一下跳到了最前面,很無聊吧?