如果“日历”这个程序已经运行,可以用下面代码找到这个程序,然后给前置显示。
HWND hProgramWnd = ::FindWindow(NULL,L"日历");
if (hProgramWnd)
{
this->m_nCmdShow = SW_SHOW;
//::BringWindowToTop(hProgramWnd);
//SetWindowPos(hProgramWnd,HWND_NOTOPMOST,0,0,30,50,SWP_NOSIZE|SWP_NOMOVE);
SetWindowPos(hProgramWnd,HWND_TOPMOST,0,0,::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN) - 26,SWP_SHOWWINDOW) ;
}
对某个程序建立程序互斥体,当运行到下面代码的时候,创建互斥体,如果有已经运行,就可以把已运行的程序前置,然后退出。对于使用者来说,就像把原来的已经运行的程序由后台调置到前台。
//只有一个程序运行
//创建进程互斥体GPSGUID
HANDLE m_hMutex = CreateMutex(NULL,FALSE,_T("GpsGUI"));
if (m_hMutex == NULL)
{
return FALSE;
}
//如果程序已经存在并且正在运行
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
HWND hProgramWnd = ::FindWindow(NULL,L"GpsGUI");
if (hProgramWnd)
{
this->m_nCmdShow = SW_SHOW;
//::BringWindowToTop(hProgramWnd);
//SetWindowPos(hProgramWnd,HWND_NOTOPMOST,0,0,30,50,SWP_NOSIZE|SWP_NOMOVE);
SetWindowPos(hProgramWnd,HWND_TOPMOST,0,0,::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN) - 26,SWP_SHOWWINDOW) ;
}
//关闭进程互斥体
CloseHandle(m_hMutex);
m_hMutex = NULL;
return FALSE;
}