C++ 运行单个实例,防止程序多次启动
利用内核对象 封装的类,使用运行单个实例,防止多次启动Demo
例子下载地址:http://pan.baidu.com/share/link?shareid=3202369154&uk=3037189616

//File Name: Singleton.h
#pragma once class Singleton
{
private:
CString strGUID;
CString strMapFileGUID; HANDLE m_hSingleton; public:
Singleton();
~Singleton();
public:
void AppStart (const HWND & hWnd) const;
};
//File Name: Singleton.cpp #include "stdafx.h"
#include "Singleton.h" Singleton::Singleton()
{
strGUID = _T("{D727BDB5-F86A-405b-910D-11AD2A4CA76E}");
strMapFileGUID = strGUID + _T("_MapFile");
m_hSingleton = NULL;
} Singleton::~Singleton()
{
if (m_hSingleton)
{
CloseHandle(m_hSingleton);
m_hSingleton = NULL;
}
} void Singleton::AppStart(const HWND & hWnd) const
{
HANDLE m_hSingleton = NULL;
m_hSingleton = CreateMutex(NULL, TRUE, strGUID);
RECT rect; ZeroMemory(&rect, sizeof(rect));
::GetWindowRect(hWnd, &rect); if (GetLastError() == ERROR_ALREADY_EXISTS)
{
// 打开共享文件
HANDLE hHandle = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, strMapFileGUID);
if (hHandle)
{
LPTSTR lpMapAddr = (LPTSTR)::MapViewOfFile(hHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0);
CString strBuffer(lpMapAddr); HWND hOldWnd = (HWND)_tcstoul(strBuffer, NULL, 10);
::SetForegroundWindow(hOldWnd); // 取消内核对象的映射
UnmapViewOfFile(hHandle); CloseHandle(hHandle); exit(0);
} }
else // 第一运行程序
{
int nNum = sizeof(HANDLE); // 创建文件映射内核对象
HANDLE hHandle = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(HANDLE), strMapFileGUID); if (hHandle)
{
// 拷贝数据到共享文件里
LPTSTR lpMapAddr = (LPTSTR)::MapViewOfFile(hHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0); CString strBuffer;
strBuffer.Format(_T("%d"), hWnd); _tcscpy(lpMapAddr, strBuffer); // 讲写入文件映射缓冲区的所有数据刷新到磁盘;
::FlushViewOfFile(lpMapAddr, strBuffer.GetLength()+1);
}
}
}
C++ 运行单个实例,防止程序多次启动的更多相关文章
- qt编写一个只能运行单个实例的程序,不用Windows API
QtSingleApplicationhttp://code.qt.io/cgit/qt-solutions/qt-solutions.git/tree/qtsingleapplication 已打开 ...
- vc++高级班之窗口篇[4]---让程序只运行一个实例
大家都看过或者使用过类似只运行一个实例的程序,比如:QQ游戏.部分浏览器 等等! 让一个程序只运行一个实例的方法有多种,但是原理都类似,也就是在程序创建后,有窗口的程序在窗口创建前, 检查系统中是 ...
- Linux编程之《只运行一个实例》
概述 有些时候,我们要求一个程序在系统中只能启动一个实例.比如,Windows自带的播放软件Windows Medea Player在Windows里就只能启动一个实例.原因很简单,如果同时启动几个实 ...
- opencv 应用程序无法正常启动(0xooooo7b)
#include<iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui ...
- win应用只允许单个实例运行,并将已运行实例窗口置顶
关键词:windows,c++,桌面应用,单个实例,窗口置顶 目标:1.判断本程序是否已有一个实例在运行.2.若有,则激活已在运行的实例(将其窗口置顶),并退出当前运行. 1.使用semaphore来 ...
- C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper
前言 在开发应用程序时,通常只让程序运行一个实例.所以,就要判断程序是否已经运行. 下面是我自己在项目中使用到,封装好的帮助类.有 普通的 C# 应用程序 和 Windows CE 和 Windows ...
- 解决C#程序只允许运行一个实例的几种方法详解
解决C#程序只允许运行一个实例的几种方法详解 本篇文章是对C#中程序只允许运行一个实例的几种方法进行了详细的分析介绍,需要的朋友参考下 本文和大家讲一下如何使用C#来创建系统中只能有该程序的一个实例运 ...
- C#让应用程序只运行一个实例的几种方法
一 判断是否有相同的实例已经运行 1 根据“Mutex”判断是否有相同的实例在运行 /// <returns>已有实例运行返回true,否则为false</returns>pu ...
- C# WINFORM判断程序是否运行,且只能运行一个实例(转)
判断程序是否已经运行,使程序只能运行一个实例有很多方法,下面记录两种, 方法1:线程互斥 static class Program { private static System.Threading. ...
随机推荐
- JAVA - 线程同步和线程调度的相关方法
JAVA - 线程同步和线程调度的相关方法 wait():使一个线程处于等待(阻塞)状态,并且释放所持有的对象的锁:wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等 ...
- 在CabloyJS中将Webpack生成的文件自动上传到阿里云OSS
背景 阿里云OSS提供了一个Webpack插件,可在Webpack打包结束后将webpack生成的文件自动上传到阿里云OSS中 下面看看在CabloyJS中如何使用该插件 新建项目,并配置MySQL连 ...
- 开源项目 PM 浅谈如何设计官网
有用户反馈进入官网首页光秃秃的一片,大家忙着做产品,忽略了官网的建设,惭愧惭愧. 确实,极简风格和极其简单还是有很大区别的. 旧的 Web 端 除了极其简单之外,它还有一个小问题, ...
- 商户编号[Merchant Id]是什么
1. Merchant Id是什么 2. Merchant Id 是有哪几个部分构成的 2.1 收单机构代码 2.2 商户地区代码 2.3 Merchant Category Code(MCC) 本文 ...
- Citus 11 for Postgres 完全开源,可从任何节点查询(Citus 官方博客)
Citus 11.0 来了! Citus 是一个 PostgreSQL 扩展,它为 PostgreSQL 添加了分布式数据库的超能力. 使用 Citus,您可以创建跨 PostgreSQL 节点集群透 ...
- colab简易使用
解压文件(zip文件) !unzip -o /content/drive/MyDrive/test.zip -d /content/ 解压test.zip到指定目录, 其他解压缩命令: linux-常 ...
- centos 7安装zabbix
1 升级系统组件到最新版本 yum -y update 2 关闭 SELinux sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" / ...
- 在mybatis中使用sum函数返回对象为Null
首先大家看一下我的XML中的SQL .DAO 和实体对象 XML DAO PO 乍一看 没毛病. 但是在Mybatis中使用sum函数,如果返回值是0(就是你在Navicat中运行的的sql正常,结 ...
- 业务可视化-让你的流程图"Run"起来
前言 最近在研究业务可视化的问题,在日常的工作中,流程图和代码往往是分开管理的. 一个被维护多次的系统,到最后流程图和代码是否匹配这个都很难说. 于是一直有一个想法,让程序直接读流程图,根据流程图的配 ...
- Pytorch从0开始实现YOLO V3指南 part1——理解YOLO的工作
本教程翻译自https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/ 视频展示:https://w ...