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;
}
...
}