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 也是如此。

相关推荐
苦藤新鸡21 小时前
8.最长的无重复字符的子串
c++·力扣
꧁Q༒ོγ꧂1 天前
C++ 入门完全指南(四)--函数与模块化编程
开发语言·c++
汉克老师1 天前
GESP2025年12月认证C++八级真题与解析(判断题8-10)
c++·快速排序··lcs·gesp八级·gesp8级
qq_433554541 天前
C++ manacher(求解回文串问题)
开发语言·c++·算法
HL_风神1 天前
设计原则之迪米特
c++·学习·设计模式
HL_风神1 天前
设计原则之合成复用
c++·学习·设计模式
汉克老师1 天前
GESP2025年12月认证C++八级真题与解析(单选题10-12)
c++·递归··gesp八级·gesp8级
bkspiderx1 天前
C++中的map容器:键值对的有序管理与高效检索
开发语言·c++·stl·map
Hard but lovely1 天前
Linux: 线程同步-- 基于条件变量 &&生产消费模型
linux·开发语言·c++
L_09071 天前
【C++】高阶数据结构 -- 平衡二叉树(AVLTree)
数据结构·c++