プロセス制御

プロセス起動

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