下载此文档

程序防止多开分析游戏多开原理.doc


文档分类:IT计算机 | 页数:约6页 举报非法文档有奖
1/6
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/6 下载此文档
文档列表 文档介绍
最近,一个公司项目要求防止程序多开,采用了几种方法,效果还行。一、使用Mutex     1、原理      创建一个互斥体,并检查它是否已经有拥有者,如果有,表明互斥体已经建立(程序已经启动),否则表明程序未启动。      2、实现      (1)首先创建一个互斥体,CreateMutex函数,第一个参数可以设置为NULL,第二个参数必须设置为false,第三个参数表示互斥体的名称,这个名称最好有一些特殊标识以防止与其他应用程序冲突,比如程序名+时间。      (2)使用GetLastError()函数判断错误信息是否为ERROR_ALREADY_EXISTS,如果是,则表示程序已经启动。       示例代码如下:viewplaincopytoclipboardprint?HANDLE hObject = ::CreateMutex(NULL,FALSE, _T("Mutex"));      if(GetLastError() == ERROR_ALREADY_EXISTS)      {          CloseHandle(hObject);          MessageBox(NULL, _T("应用程序已经在运行!"), _T("提示"), MB_ICONERROR|MB_OK);          return FALSE;      }        3、效果      这个是非常简单的应用程序多开检测,一般的程序多开器均能破解此限制。二、使用窗口属性     1、原理      在程序启动时,枚举桌面所有窗口,并检查其属性列表中是否存在特殊的属性值,如果有则表明程序已经启动,否则程序未启动。     2、实现     (1)程序启动时首先枚举所有窗口查找是否存在特定属性值,使用EnumWindows函数遍历所有窗口。此函数需要一个回调函数,对于每一个窗口,都会调用此函数,并把遍历到的窗口句柄(HWND)传递给该函数,该回调函数原型如下:     BOOLCALLBACKEnumWndProc(HWNDhwnd,LPARAMlParam);lParam可由EnumWindows的第二个参数传递。     (2)在EnumWndProc回调函数中,我们需要获取窗口的属性值,然后检查是否和我们预定的属性值相同,如果相同,则表示程序已经启动。     (3)如果没有找到,我们需要将此特殊属性值设置到本程序的主窗口。     示例代码如下:viewplaincopytoclipboardprint?CString g_propName = _T("Prop");  HANDLE g_hValue = (HANDLE)1;  BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lParam)  {      HANDLE h = GetProp(hwnd, g_propName);      if(h == g_hValue)      {          *(HWND*)lParam = hwnd;          return FALSE;      }      return TRUE;  }  BOOL CXxxxDlg::OnInitDialog()  {      CDialo

程序防止多开分析游戏多开原理 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数6
  • 收藏数0 收藏
  • 顶次数0
  • 上传人小点
  • 文件大小36 KB
  • 时间2019-06-15