您的位置:首页 > Web前端

只启动一个程序实例,如果已运行则调到前端

2014-01-14 16:39 274 查看
1. 设置互斥量,并查找窗口,在InitInstance()函数中实现
TCHAR szMuteName[] = _T("MySignleApp");
HANDLE hSingleTon = CreateMutex(NULL, FALSE, szMutexName);
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
HWND hwndPrevious = ::GetWindow(::GetDesktopWindow(), GW_CHILD); //查找先前实例的主窗口
while(::IsWindow(hwndPrevious))
{
//检查窗口是否有预设的标记
//有,则是要查找的主窗口
if(::GetProp(hwndPrevious,  m_pszExeName)//要用SetProp来设定标记,可在MainFrm的OnCreate函数中调用SetProp
{
//窗口已经最小化,则恢复其大小
if(::IsIconic(hwndPrevious))
{
::ShowWindow(hwndPrevious, SW_RESTORE);
}
::SetForegroundWindow(hwndPrevious);//激活主窗口
::SetForegroundWindow(::GetLastActivePopup(hwndPrevious));//激活主窗口的对话框
return FALSE;//退出本实例
}
      hwndPrevious = ::GetWindow(hwndPrevious, GW_HWNDNEXT);//查找下一个窗口}
    return FALSE;//前一个实例已经存在,但找不到其主窗口,退出实例}
2. 设置标记,在MainFrame的OnCreate()函数中
::SetProp(m_hWnd, theApp.m_pszExeName, (HANDLE)1);
3. 在程序关闭时去掉标记,可在OnClose()函数中实现
::RemoveProp(m_hWnd, theApp.m_pszExeName);

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐