限制 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;
}

标签: MFC 单进程程序

选择表情