zoukankan      html  css  js  c++  java
  • 使程序只运行一个实例

    //APP 里面

    //1.
    // 此程序只能运行一次,用互斥量来判断程序是否已运行

    1 HANDLE m_hMutex=CreateMutex(nullptr,TRUE, m_pszAppName); 
    2 if(GetLastError()==ERROR_ALREADY_EXISTS) { return FALSE; }

    //2.

    1 HWND hWnd = FindWindow(nullptr, m_pszAppName/*_T("MyDlg")*/);   //第一个参数: 窗口的类名   第二个参数: 窗口名称(标题)即m_pszAppName
    2     if (IsWindow(hWnd))
    3     {
    4         ::MessageBox(nullptr, _T("已经有一个实例在运行了!"), _T("提示"), MB_OK);
    5         ::ShowWindow(hWnd, SW_NORMAL);     // 显示
    6         ::SetForegroundWindow(hWnd);       // 激活
    7         return FALSE;
    8     }

    3.

    BOOL CheckAppRunning()
    {
    // 用应用程序名创建信号量 或者创建 互斥量
    HANDLE hSem = CreateSemaphore(NULL, 1, 1, m_pszExeName);
    
        if (GetLastError() == ERROR_ALREADY_EXISTS)
        {
            // 关闭信号量句柄
            CloseHandle(hSem);
    
            // 寻找先前实例的主窗口
            HWND hWndPrevious = ::GetWindow(::GetDesktopWindow(), GW_CHILD);
            while (::IsWindow(hWndPrevious))
            {
                // 检查窗口是否有预设的标记?
                // 有,则是我们寻找的主窗
                if (::GetProp(hWndPrevious, m_pszExeName))
                {
                    // 主窗口已最小化,则恢复其大小
                    if (::IsIconic(hWndPrevious))
                    ::ShowWindow(hWndPrevious, SW_RESTORE);
                    // 将主窗激活
                    ::SetForegroundWindow(hWndPrevious);
                    // 将主窗的对话框激活
                    ::SetForegroundWindow(::GetLastActivePopup(hWndPrevious));
                    // 退出本实例
                    return TRUE;
                }
    
                // 继续寻找下一个窗口
                hWndPrevious = ::GetWindow(hWndPrevious, GW_HWNDNEXT);
            }
    
            // 前一实例已存在,但找不到其主窗
            // 可能出错了
            // 退出本实例
            return TRUE;
        }
        return FALSE;
    }
  • 相关阅读:
    Maven命令行使用:mvn clean package(打包)
    快速构建 Spring Boot 应用
    Spring MVC 表单处理
    Spring Web Hello World 例子
    Spring 事务管理
    开发环境搭建
    考研计算机专业课练习题
    考研计算机自测练习
    考研计算机自测练习答案
    考研计算机专业常见术语
  • 原文地址:https://www.cnblogs.com/xslwm/p/7208937.html
Copyright © 2011-2022 走看看