当前位置: 首页 > news >正文

94.游戏的启动与多开-互斥量对开检测

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:易道云信息技术研究院

上一个内容:93.游戏的启动与多开-进程枚举多开检测

使用互斥量做多开检测就算程序更改了名字也会被检测出多开

以 93.游戏的启动与多开-进程枚举多开检测 它的代码为基础进行修改

MUlCheatDlg.cpp文件的修改

// CMUlCheatDlg 消息处理程序BOOL CMUlCheatDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 事前检测if (TestMulByMutex())ExitProcess(0);//if (TestMulByProcess())ExitProcess(0);// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动//  执行此操作SetIcon(m_hIcon, TRUE);            // 设置大图标SetIcon(m_hIcon, FALSE);        // 设置小图标// TODO: 在此添加额外的初始化代码return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
bool CMUlCheatDlg::TestMulByMutex()
{HANDLE lMutex = CreateMutex(0, 0, L"MulCheat");if (GetLastError() == ERROR_ALREADY_EXISTS) {return true;}return false;
}

MUlCheatDlg.h文件的修改


// MUlCheatDlg.h: 头文件
//#pragma once
#include <TlHelp32.h>// CMUlCheatDlg 对话框
class CMUlCheatDlg : public CDialogEx
{
// 构造
public:CMUlCheatDlg(CWnd* pParent = nullptr);    // 标准构造函数// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_MULCHEAT_DIALOG };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持// 实现
protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()// 检测多开的函数bool TestMulByProcess();bool TestMulByMutex();
public:afx_msg void OnBnClickedOk();
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 同三维S61-20SDI 20倍 HDMI SDI USB3.0 网口 3高清摄像机
  • Azure AI Search 中的二进制量化:优化存储和加快搜索速度
  • 【MySQL】索引使用规则——(覆盖索引,单列索引,联合索引,前缀索引,SQL提示,数据分布影响,查询失效情况)
  • python07-单元测试框架unittest1-1
  • JS都有哪些操作数组的方法
  • JS简介 JS特点
  • 用ceres实现lio-sam平面点匹配
  • python开发VTK入门
  • Amazon QuickSight 实验
  • 秋招突击——算法练习——8/26——图论——200-岛屿数量、994-腐烂的橘子、207-课程表、208-实现Trie
  • Python画笔案例-030 实现打点之斜正方
  • 1306. 跳跃游戏 III
  • 【GIT】idea中实用的git操作,撤回commit,撤回push、暂存区使用
  • Oracle中数据类型 NVARCHAR2 与 VARCHAR2 的对比
  • 【嵌入式】内存未对齐导致程序崩溃(铺获信号量SIGBUS,数值7)
  • hexo+github搭建个人博客
  • “大数据应用场景”之隔壁老王(连载四)
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【Leetcode】104. 二叉树的最大深度
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • css的样式优先级
  • ECMAScript入门(七)--Module语法
  • flutter的key在widget list的作用以及必要性
  • JavaScript对象详解
  • java正则表式的使用
  • nginx 负载服务器优化
  • Python3爬取英雄联盟英雄皮肤大图
  • REST架构的思考
  • spark本地环境的搭建到运行第一个spark程序
  • vue:响应原理
  • 初识 beanstalkd
  • 大快搜索数据爬虫技术实例安装教学篇
  • 每天10道Java面试题,跟我走,offer有!
  • 入口文件开始,分析Vue源码实现
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 通信类
  • 一个完整Java Web项目背后的密码
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • Nginx实现动静分离
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #include到底该写在哪
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (JS基础)String 类型
  • (待修改)PyG安装步骤
  • (二)pulsar安装在独立的docker中,python测试
  • (二)windows配置JDK环境
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (六)vue-router+UI组件库
  • (七)Flink Watermark
  • (十六)一篇文章学会Java的常用API