CreateProcess()で任意のプロセスを起動できます。
以下はHogeEditorというプロセスを起動する場合のソースです。
void CMainFrame::OnToolHogeEditor() { HWND hWnd = NULL; //==== 対象プロセスの起動確認 ====// hWnd = ::FindWindow(NULL, _T("HogeEditor")); if(hWnd == NULL) { //-==- 起動されていない -==-// STARTUPINFO si; PROCESS_INFORMATION procInfo; //==== HogeEditor起動 ====// ZeroMemory(&si, sizeof(STARTUPINFO)); ZeroMemory(&procInfo, sizeof(PPROCESS_INFORMATION)); si.cb = sizeof(si); CreateProcess( _T("HogeEditor.exe"), NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &procInfo ); } else { //-==- 起動されている -==-// //==== HogeEditorをアクティブにする ====// if(::IsIconic(hWnd)) { ::ShowWindow(hWnd, SW_SHOWNOACTIVATE); } ::SetForegroundWindow(hWnd); } }
BOOL CHogeApp::InitInstance() { //==== 2重起動防止 ====// ::CreateMutex(NULL, TRUE, m_pszExeName); if(GetLastError() == ERROR_ALREADY_EXISTS) { //-==- 既に起動されている -==-// //==== 起動されているウィンドウを最前面に表示 ====// CWnd* pWnd = CWnd::FindWindow(NULL, _T("Hoge")); if(pWnd) { pWnd->SetForegroundWindow(); } return FALSE; } ... }