QQ登录

只需一步,快速开始

如何将应用程序已运行的实例调至前台

[ 复制链接 ]
一般在一个程序只能运行一个实例时全使用到这个功能。
双击运行程序,如果已有一个实例在运行,则将正在运行的程序最前面显示。

首先程序初始代码段添加一代码,在指定窗口的属性表中增加一个新项
        //添加窗口标志
        ::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.         }
复制代码


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索