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

相关推荐
YIN_尹43 分钟前
【Linux系统编程】进程地址空间
linux·c++
EverestVIP1 小时前
C++中空类通常大小为1的原理
c++
网域小星球2 小时前
C++ 从 0 入门(六)|C++ 面试必知:运算符重载、异常处理、动态内存进阶(终极补充)
开发语言·c++·面试
晚会者荣2 小时前
红黑树的插入(有图)
c++
John.Lewis2 小时前
C++进阶(12)附加学习:STL之空间配置器(了解)
开发语言·c++·笔记
汉克老师2 小时前
GESP2023年12月认证C++三级( 第三部分编程题(2、单位转换))
c++·string·单位转换·gesp三级·gesp3级
cpp_25013 小时前
P2347 [NOIP 1996 提高组] 砝码称重
数据结构·c++·算法·题解·洛谷·noip·背包dp
Hugh-Yu-1301233 小时前
二元一次方程组求解器c++代码
开发语言·c++·算法
楼田莉子4 小时前
同步/异步日志系统:日志落地模块\日志器模块\异步日志模块
linux·服务器·c++·学习·设计模式
文祐4 小时前
C++类之虚函数表及其内存布局
开发语言·c++