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

相关推荐
hansang_IR6 小时前
【题解 | 两种做法】洛谷 P4208 [JSOI2008] 最小生成树计数 [矩阵树/枚举]
c++·算法·dfs·题解·枚举·最小生成树·矩阵树定理
要做朋鱼燕7 小时前
【C++ 】string类:深拷贝与浅拷贝解析
java·开发语言·c++·职场和发展
一只鱼^_8 小时前
365. 水壶问题(详解)
java·javascript·c++·leetcode·线性回归
Dream it possible!8 小时前
LeetCode 面试经典 150_滑动窗口_串联所有单词的子串(32_30_C++_困难)(滑动窗口:控制起点和滑动距离)
c++·leetcode·面试·滑动窗口
Q741_1478 小时前
C++ 面试高频考点 力扣 35. 搜索插入位置 二分查找 左右端点查找 题解 每日一题
c++·算法·leetcode·面试·二分查找
saddhu.8 小时前
C++ 快速复习指南(上半部分)
java·c++·算法
晚云与城9 小时前
今日分享:C++ -- vector
开发语言·c++
River41610 小时前
Javer 学 c++(九):结构体篇
c++·后端