MFC应用防止多开

编写的MFC应用默认会存在可同时打开多个窗口问题,这样有可能产生问题。如何防止打开多次。

FindWindow(L"#32770", L"DemoApp");

复制代码
	// 创建互斥量,确保单实例运行. 不同应用要不一样名字
	HANDLE hMutex = ::CreateMutex(NULL, FALSE, L"CDemoAppSingleInstance");
	if (hMutex != NULL && GetLastError() == ERROR_ALREADY_EXISTS)
	{
		// 已经有实例在运行,找到主窗口并激活
		HWND hWnd = ::FindWindow(L"#32770", L"DemoApp");
		if (hWnd)
		{
			if (::IsIconic(hWnd)) // 如果最小化,恢复
				::ShowWindow(hWnd, SW_RESTORE);
			::SetForegroundWindow(hWnd); // 激活窗口
		}
		return FALSE; // 退出新实例
	}

新开窗口,能直接打开之前的。但是标题变化后会找不到窗口。

HWND hWnd = ::FindWindow(L"CDemoAppWndClass", NULL);

在PreCreateWindow 中自定义class。

不会应标题变化而改变,但是再次打开应用时,不会跳到之前窗口。

发自定义MESSAGE 也是如此。

相关推荐
‎ദ്ദിᵔ.˛.ᵔ₎7 小时前
c++11:fuction包装器
开发语言·c++
霍霍的袁7 小时前
【C++】哈希表实现指南:从原理到开放定址法、链地址法的实现
c++·学习·哈希算法·散列表·visual studio
WL学习笔记8 小时前
类和对象(下)
c++·类和对象
傲世仙尊9 小时前
拷贝构造-传值传参的连锁反应与隐式函数的三个局限
c++
垆边人似月.9 小时前
华为机试题 :最大数
c++·算法·华为
方便面不加香菜10 小时前
C++ 关于多态的知识点讲解
开发语言·c++
jimy110 小时前
C++ 类成员函数的内联定义(inline)详解
开发语言·c++
sanqima10 小时前
CreateThread、_beginthreadex、AfxBeginThread三种线程创建的区别与联系
c++·tls·线程创建
sanqima11 小时前
依赖TLS和模块状态的MFC类
c++·mfc·tls·module state
All for pursuit.11 小时前
【动态规划-11】279.完全平方数
数据结构·c++·算法·leetcode·动态规划