这里有两个函数,在CXXXApp::InitInstance()函数中调用
前者在函数开始处,后者在函数结束处
// 单次运行控制函数
BOOL StartCheck(CWinApp * app)
{
::CreateMutex( NULL, TRUE, app->m_pszExeName );
if( GetLastError() == ERROR_ALREADY_EXISTS )
{
// Set Focus to Previous instance
// First find our previous application's main window.
CWnd * pPrevWnd = CWnd::GetDesktopWindow()->GetWindow(GW_CHILD);
while( pPrevWnd )
{
if( ::GetProp( pPrevWnd->GetSafeHwnd(), app->m_pszExeName ) )
{
// Found window, now set focus to the window.
// First restore window if it is currently iconic.
if( pPrevWnd->IsIconic() )
pPrevWnd->ShowWindow(SW_RESTORE);
// Set focus to main window.
pPrevWnd->SetForegroundWindow();
// If window has a pop-up window, get next window in list.
pPrevWnd->GetLastActivePopup()->SetForegroundWindow();
return FALSE;
}
// Did not find window, get next window in list.
pPrevWnd=pPrevWnd->GetWindow(GW_HWNDNEXT);
}
TRACE("Could not find previous instance main window!\n");
return FALSE;
}
return TRUE;
}
void EndCheck(CWnd*pDlg,CString m_pszExeName)
{
::SetProp( pDlg->GetSafeHwnd(), m_pszExeName, (HANDLE)1 );
}