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

相关推荐
今天也好累16 分钟前
贪心算法之分数背包问题
c++·笔记·学习·算法·贪心算法
carver w17 分钟前
c++,数据结构,unordermap哈希表基本操作
数据结构·c++·散列表
Incredibuild19 分钟前
CI/CD Pipeline:完整指南
c++·ci/cd·devsecops
深思慎考20 分钟前
LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(4——通过jsoncpp库建立搜索模块)
linux·c++·搜索引擎
青草地溪水旁1 小时前
设计模式(C++)详解——职责链模式 (Chain of Responsibility)(2)
c++·设计模式·责任链模式
青草地溪水旁1 小时前
设计模式(C++)详解——职责链模式 (Chain of Responsibility)(1)
c++·设计模式·责任链模式
不沾一点因果2 小时前
基于C++的分布式RPC框架(一)
c++
usabcd22 小时前
如何重新编译HyperLPR原生库以消除16k对齐警告
android·c++·cmake·ndk·mnn·16k对齐·hyperlpr
椎名澄嵐4 小时前
★ Linux ★ 信号
linux·运维·服务器·开发语言·c++
普通网友5 小时前
C++构建缓存加速
开发语言·c++·算法