不多说直接上代码:
第一种方法:使用互斥体与FindWindow
HANDLE hMutex = CreateMutex(NULL, TRUE, _T("KeyBoard Tools"));
if (hMutex && ERROR_ALREADY_EXISTS == GetLastError())
{
HWND hWnd = FindWindow(TEXT("#32770")/*NULL*/, TEXT("KeyBoard Tools"));//找到另一个实例
if (hWnd != NULL)
{
::SwitchToThisWindow(hWnd, TRUE);
::ShowWindow(hWnd, SW_SHOWNORMAL);
return FALSE;
}
}
第二种方法:使用共享内存(共享内存的详细介绍见:http://blog.csdn.net/qq_23992597/article/details/68557020)
创建一个MFC应用程序后,在App实现文件的头上加上共享段,比如:
#pragma data_seg("ServerInstance")
BOOL existed = FALSE;
#pragma data_seg()
#pragma comment(linker, "/section:ServerInstance,rws")
然后,在该文件的InitInstance函数里进行判断并设置,如下
if(!existed)
{
existed = TRUE;
}
else
{
AfxMessageBox(_T("已存在一个实例,本实例即将关闭")) ;
return FALSE;
}