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();
};