限制程序多开

http://www.cctry.com/thread-38070-1-3.html

1.创建新节法

为程序加入一个全局变量,让这个全局变量可以被程序的多个实例所共享,每当程序实例运行时就对该全局变量进行修改。通过访问该全局变量,就可以知道有多少个实例在运行了。当然,为了系统的安全和稳定性,默认情况下是不允许这样做得。为了阻止这种事情的发生,系统使用了copy-on-write(写入时拷贝)机制,不过我们可以使用创建新节的方法来绕过它。
#pragma data_seg("Shared") 
HWND hWnd=NULL; 
#pragma data_seg() 
#pragma comment(linker, "/Section:Shared,RWS") 

初始化函数中:
if (hWnd==NULL) 
{ 
    hWnd=m_hWnd; 
} 
else 
{ 
    AfxMessageBox(_T("只允许运行一个实例!")); 
    ::SetForegroundWindow(hWnd); 
    ExitProcess(0); 
} 


2.互斥体法
缺点是无法激活旧窗口,可以用CreateMutex,CreateEvent,OpenMutex等API实现
hObject=CreateMutex(NULL,FALSE,_T("互斥体")); 
if (GetLastError()==ERROR_ALREADY_EXISTS) 
{ 
    AfxMessageBox(_T("只允许运行一个实例!")); 
    ExitProcess(0); 
} 


3.查找窗口标题法
1.FindWindow

初始化函数中
hObject=CreateMutex(NULL,FALSE,_T("互斥体")); 
if (GetLastError()==ERROR_ALREADY_EXISTS) 
{ 
    AfxMessageBox(_T("只允许运行一个实例!")); 
    ExitProcess(0); 
} 

2.EnumWindows
BOOL CALLBACK MyEnumWndProc(HWND hwnd,LPARAM lParam) 
{ 
    TCHAR szCaption[256]={0}; 
    GetWindowText(hwnd,szCaption,256); 
    if (_tcscmp(_T("EnumWindows单实例"),szCaption)==0) 
    { 
        AfxMessageBox(_T("只允许运行一个实例!")); 
        ::SetForegroundWindow(hwnd); 
        ExitProcess(0); 
    } 
    return TRUE; 
} 

初始化函数中
EnumWindows(MyEnumWndProc,NULL); 
SetWindowText(_T("EnumWindows单实例")); 

3.GetWindow
TCHAR szCaption[MAX_PATH]={0};
HWND hWnd=::GetWindow(::GetDesktopWindow(), GW_CHILD);
while(hWnd!=NULL)
{
    ::GetWindowText(hWnd,szCaption,MAX_PATH);
    if (_tcscmp(_T("GetWindow单实例"),szCaption)==0)
    {
        AfxMessageBox(_T("只允许运行一个实例!"));
        ::SetForegroundWindow(hWnd);
        ExitProcess(0);
    }
    hWnd=::GetWindow(hWnd, GW_HWNDNEXT);
}
SetWindowText(_T("GetWindow单实例"));

Zprotect是新一代的软件加密保护系统,拥有多项革命性的创新技术,设计用来保护您的软件产品不被破解,减少由于盗版给您带来的经济损失!此外,Zprotect 拥有简单易用的许可控制系统,您无需更改任何代码,即可为您的软件添加注册机制。与传统软件保护系统相比,Zprotect更加注重对代码的处理,并且拥有良好的稳定性和兼容性,是您配置软件保护系统的最佳选择! Zprotect拥有简单易用、高效灵活的注册和授权管理系统: 一键试用技术. Zprotect 为您提供一键试用技术,您不必修改任何源代码,在短短几分钟之内就可以将您的完整版软件转换为“先试用后购买”的试用版软件,甚至还可以支持带硬件锁定的序列号注册。 内建注册和许可管理系统. Zprotect 内建灵活易用的注册和许可管理系统,您可以轻松创建具有时间限制、硬件锁定、水印信息的注册码。 动态算法生成引擎. 外壳所使用算法均动态生成,随机且唯一,让逆向算法变得困难和高成本。 时间限制注册密钥. 如果您需要限制注册版本的有效期,可以通过创建具有时间限制的注册密钥来实现。 硬件锁定(一机一码). 激活硬件锁定功能的注册密钥,只能在某一特定计算机上使用;您可以通过锁定用户计算机的硬件信息来控制注册码的传播,例如 CPU、硬盘序列号、网卡 MAC 地址等。 密钥黑名单. 如果您的用户泄漏了注册密钥,那么您就可以将该密钥添加进密钥黑名单,这样下一版本更新的时候您就可以锁定该密钥。 启动密码保护. 这种附加的保护可以有效防止软件未经授权的使用,必须输入正确的密码才可以运行程序。 试用次数、天数、日期和运行时间限制. 使用 Zprotect ,您可以轻松为您的应用程序添加试用次数、试用天数、试用日期和试运行时间等限制;这样您的客户就可以全功能评估您的软件产品,增大购买意向
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值