限制 MFC 程序只能运行一个
有时候会有这样的需求:让某个程序只能运行一个,不让它能打开多个,即多开,多进程。使用 CWnd 类的几个函数即可实现。
上图是 VS 自带的 Spy++ 工具,使用它可以查看Windows操作系统中运行的程序窗口、消息、进程、线程信息。一个含窗口的应用程序总是有窗口信息的,使用 FindWindow 函数可以查找系统中是否含有指定窗口类名和标题名的程序在运行,如返回非空句柄则说明该程序已运行,然后再做对应判断即可实现单进程程序。
可以直接使用 Spy++ 找到窗口的标题,也可以到资源视图中自定义一个,然后在 InitInstance() 初始函数中加入对应判断即可:
CWnd *pWndPrev, *pWndChild;//定义句柄指针
pWndPrev = CWnd::FindWindow(NULL, _T("MFCApplication1"));//第一个参数是窗口类名,第二个参数是窗口标题
if (pWndPrev != NULL)//返回句柄不为空说明该程序已运行
{
//AfxMessageBox(_T("程序已运行!"));//可以选择先提示程序已运行
pWndChild = pWndPrev->GetLastActivePopup();//获取该程序最近处于活动状态的弹出窗口
if (pWndPrev->IsIconic())
pWndPrev->ShowWindow(SW_RESTORE);//如果窗口已经最小化就恢复显示窗口
pWndChild->SetForegroundWindow();//激活该程序窗口到前台显示
return FALSE;
}
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »