//保证程序只有一个实例在运行
BOOL CVideoViewApp::IsExistsInstance()
{
HANDLE hSem = CreateSemaphore(NULL,1,1,"WJLHANKEXIN"); //创建信标对象
if (hSem)
{
//如何信标对象存在,则已存在一个实例
if (ERROR_ALREADY_EXISTS == GetLastError())
{
CloseHandle(hSem); //关闭信号量句柄
//获取桌面上的窗口
HWND hWndPrev=::GetWindow(::GetDesktopWindow(),GW_CHILD);
//是存在的窗口
while (::IsWindow(hWndPrev))
{
//判断窗口是否有我们设置的标记
if (::GetProp(hWndPrev,"WJLHANKEXIN"))
{
//判断是否是最小化
if (::IsIconic(hWndPrev))
{
//显示
::ShowWindow(hWndPrev,SW_RESTORE);
}
//激活到前台
::SetForegroundWindow(hWndPrev);
return FALSE; //退出新的实例
}
hWndPrev = ::GetWindow(hWndPrev,GW_HWNDNEXT);
}
AfxMessageBox("实例在运行,但找不到窗口");
return FALSE;
}
}
else
{
CloseHandle(hSem);
hSem = NULL;
AfxMessageBox("创建信标对象失败,退出程序");
return FALSE;
}
//实例不存在
return TRUE;
}
保证一个实例运行
最新推荐文章于 2020-03-12 18:13:05 发布