工控编程吧
标题:
上位机MFC如何将应用程序已运行的实例调至前台
[打印本页]
作者:
qq263946146
时间:
2019-8-12 10:31
标题:
上位机MFC如何将应用程序已运行的实例调至前台
上一例程我们介绍可以使用函数CreateMutex创建互斥对象。
创建失败就表示已有实例在运行。
在知道有实例在运行,我们就可以结果GetDesktopWindow,GetWindow,GetProp
找到实例的标识,进而 发送消息给实例窗口,将其显示在最前面,发送一些额外消息。
BOOL CDemoApp::InitInstance()
{
//创建互斥量
m_hMutex = ::CreateMutex(NULL, FALSE, _T("DemoApp"));
//判断互斥量是否存在
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
//获得桌面窗口
CWnd* pDesktopWnd = CWnd::GetDesktopWindow();
//获得第一个子窗口
CWnd* pWnd = pDesktopWnd->GetWindow(GW_CHILD);
while (pWnd != NULL)
{
//获得窗口标志
if (::GetProp(pWnd->m_hWnd, m_pszExeName))
{
//激活窗口
pWnd->SetForegroundWindow();
pWnd->SetDlgItemText(IDC_TEXT, _T("应用程序已经运行。"));
return FALSE;
}
// 继续寻找下一个窗口
pWnd = pWnd->GetWindow(GW_HWNDNEXT);
}
return FALSE;
}
}
复制代码
记得程序退出时,清楚变量。
int CDemoApp::ExitInstance()
{
if (m_hMutex != NULL)
{
//关闭句柄
CloseHandle(m_hMutex);
}
return CWinApp::ExitInstance();
}
复制代码
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4