zoukankan      html  css  js  c++  java
  • 防多开常用思路

    防多开常用思路

    参考:http://www.cppblog.com/elva/archive/2008/02/19/42923.html

    windows系统下,程序防止多开的几种常见方法:
    1)使用FindWindow API函数。
    通过查找窗口标题(或/和类名)来判断程序是否正在运行。如果找到了,表明程序正在运行,这时可退出程序,达到不重复运行的效果;反之表明程序是第一次运行。
    这种方法不适用于以下情况,程序的标题是动态变化的、系统中运行了相同标题(或/和类名)的程序

     

    2)Mutex/Event/Semaphore
    通过互斥对象/信号量/事件等线程同步对象来确定程序是否已经运行。最常用的函数如:CreateMutexA(注意:QQ堂、QQ游戏大厅就是采用这样方法来限制程序多开的)

        //默认使用互斥体防多开
        g_hMutex = CreateMutex(NULL, FALSE, _T("HackTool"));
    
        //如果创建互斥体失败或互斥体已经存在
        if (g_hMutex == NULL || GetLastError() == ERROR_ALREADY_EXISTS)
        {
            MessageBox(_T("请勿双开本程序,即将退出"));
            exit(0);//正常退出
        }

     

    3)内存映射文件(File Mapping)
    通过把程序实例信息放到跨进程的内存映射文件中,也可以控制程序多开。

     

    4)DLL全局共享区
    DLL全局共享区在映射到各个进程的地址空间时仅被初始化一次,且是在第一次被windows加载时,所以利用该区数据就能对程序进行多开限制。

     

    5)全局Atom
    将某个特定字符串通过GlobalAddAtom加入全局原子表(Global Atom Table),程序运行时检查该串是否存在来限制程序多开。(该Atom不会自动释放,程序退出前必须调用GlobalDeleteAtom来释放Atom)

     

    6)检查窗口属性
    将某些数据通过SetProp加入到指定窗口的property list,程序运行时枚举窗口并检查这些数据是否存在来限制多开。

    直面挫折,顽强生长
  • 相关阅读:
    6th Alpha阶段的postmortem报告
    两种open()函数
    文件操作权限第一位的0是什么意思
    vi的查找与替换
    浅析Linux下的/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc文件
    Linux命令总结:file
    Linux下/boot目录
    英语单词简记
    Linux下grep命令
    Linux下find命令
  • 原文地址:https://www.cnblogs.com/ndyxb/p/12492719.html
Copyright © 2011-2022 走看看