【MFC】单实例运行环境中,如何激活已经运行的实例并在顶层窗口全屏显示?两种方法,全网首发!

方法一:(独创方法,全网首发)使用ShowWindow

 1 BOOL CMyApp::InitInstance()
 2 {
 3     // One instance
 4     HANDLE hMutex = CreateMutex(NULL, TRUE, _T("MyApp")); //Exe文件名字MyApp.exe
 5     if (NULL == hMutex)
 6     {
 7         return FALSE;
 8     }
 9 
10     //如果程序已经存在并且正在运行, 激活已经运行的实例
11     if( GetLastError() == ERROR_ALREADY_EXISTS )
12     {
13         //系统根据窗口标题找到窗口
14         HWND hProgramWnd = ::FindWindow(NULL, _T("此处填写待激活窗口的标题"));
15 
16         if (NULL != hProgramWnd)
17         {
18             ::ShowWindow(hProgramWnd, SW_SHOWMAXIMIZED); //将运行的程序窗口还原成最大窗口状态
19             ::SetForegroundWindow(hProgramWnd); //使得被激活窗口出现在顶层窗口
20         }
21         
22         //关闭进程互斥体
23         CloseHandle(hMutex);
24         return FALSE;
25     }
26     
27     ... //其他代码
28 }


方法二:(网上通用方法)使用SetWindowPos
 1 BOOL CMyApp::InitInstance()
 2 {
 3     // One instance
 4     HANDLE hMutex = CreateMutex(NULL, TRUE, _T("MyApp")); //Exe文件名字MyApp.exe
 5     if (NULL == hMutex)
 6     {
 7         return FALSE;
 8     }
 9 
10     //如果程序已经存在并且正在运行, 激活已经运行的实例
11     if( GetLastError() == ERROR_ALREADY_EXISTS )
12     {
13         //系统根据窗口标题找到窗口
14         HWND hProgramWnd = ::FindWindow(NULL, _T("此处填写待激活窗口的标题"));
15 
16         if (NULL != hProgramWnd)
17         {
18             WINDOWPLACEMENT *pWndpl = NULL;
19             WINDOWPLACEMENT  wpm; 
20             pWndpl = &wpm;
21             GetWindowPlacement(hProgramWnd, &wpm);
22             if (NULL != pWndpl)
23             {
24                 pWndpl->showCmd = SW_SHOWMAXIMIZED; //将运行的程序窗口还原成最大窗口状态
25                 ::SetWindowPlacement(hProgramWnd, pWndpl);
26                 SetWindowPos(hProgramWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
27                 ::SetForegroundWindow(hProgramWnd); //使得被激活窗口出现在顶层窗口
28             }
29         }
30         
31         //关闭进程互斥体
32         CloseHandle(hMutex);
33         return FALSE;
34     }
35     
36     ... //其他代码
37 }

 

 

 

posted @ 2020-05-21 14:42  大欢哥  阅读(503)  评论(0)    收藏  举报