本文参考
http://blog.163.com/ymkigeg@yeah/blog/static/82395301201310211554172/?latestBlog
http://www.cnblogs.com/likebeta/archive/2011/07/01/2095590.html
1、在InitInstance的开始
m_hMutex = ::CreateMutexW(NULL, FALSE, LPCWSTR("STM32_Upgrade"));//这是成员变量
//判断互斥量是否存在
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
//AfxMessageBox(_T("应用程序已经运行!"));
//查找这个窗口,注意,这个变量窗口运行起来的标题!
//修改对话框标题之后也要修改这个才会激活前一个实例
HWND hWnd = FindWindow(NULL, TEXT("Firmware Update"));
if (IsWindow(hWnd))
{
//::MessageBox(NULL, TEXT("已经有一个实例在运行了。"), TEXT("注意"), MB_OK);
::ShowWindow(hWnd, SW_NORMAL); // 显示
::SetForegroundWindow(hWnd); // 激活
return FALSE;
}
return FALSE;
}
2、在ExitInstance中
if (m_hMutex != NULL)
{
CloseHandle(m_hMutex); //关闭互斥量句柄
}