工控编程吧

标题: 如何将应用程序已运行的实例调至前台 [打印本页]

作者: qq263946146    时间: 2019-10-20 14:24
标题: 如何将应用程序已运行的实例调至前台
一般在一个程序只能运行一个实例时全使用到这个功能。
双击运行程序,如果已有一个实例在运行,则将正在运行的程序最前面显示。

首先程序初始代码段添加一代码,在指定窗口的属性表中增加一个新项
        //添加窗口标志
        ::SetProp(m_hWnd, AfxGetApp()->m_pszExeName, (HANDLE)1);


然后在APP类初始化时进行判断

  1. BOOL CDemoApp::InitInstance()
  2. {
  3.         //创建互斥量
  4.         m_hMutex = ::CreateMutex(NULL, FALSE, _T("DemoApp"));

  5.         //判断互斥量是否存在
  6.         if (GetLastError() == ERROR_ALREADY_EXISTS)       
  7.         {
  8.                 //获得桌面窗口
  9.                 CWnd* pDesktopWnd = CWnd::GetDesktopWindow();

  10.                 //获得第一个子窗口
  11.                 CWnd* pWnd = pDesktopWnd->GetWindow(GW_CHILD);

  12.                 while (pWnd != NULL)
  13.                 {
  14.                         //获得窗口标志
  15.                         if (::GetProp(pWnd->m_hWnd, m_pszExeName))
  16.                         {       
  17.                                 //激活窗口
  18.                                 pWnd->SetForegroundWindow();

  19.                                 pWnd->SetDlgItemText(IDC_TEXT, _T("应用程序已经运行。"));

  20.                                 return FALSE;
  21.                         }

  22.                         // 继续寻找下一个窗口
  23.                         pWnd = pWnd->GetWindow(GW_HWNDNEXT);
  24.                 }

  25.                 return FALSE;       
  26.         }
复制代码







欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4