• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 怎样限定软件的使用期限?

怎样限定软件的使用期限?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了限定期限,cf绝版限定超长期限,限定整改期限,给软件加使用期限,软件许可使用期限等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 怎样限定软件的使用期限?
描述:

本人编了一个应用软件,想限定用户的使用期限,可是我发现只要我一修改系统时间,那个软件又可以使用了,这是怎么回事?怎样才能实现即使修改系统时间也用不了这个软件?
请高手指点指点,谢谢!
附(部分代码):
1 头文件:
BOOL IsInstalled();
BOOL GetLimitTime(CTime& t);  //t用来存储从注册表中读到的时间值
BOOL SetLimitTime(DWORD nYear,DWORD nMonth,DWORD nDay,
              DWORD nHour,DWORD nMinute,DWORD nSecond);
2 *.cpp文件:
     BOOL CTimeLimitApp::InitInstance()
{
//先获得当前的系统时间
CTime CurTime = CTime::GetCurrentTime();
    //检查软件是否第一次运行,如果是则设定限制时间
//我们这儿设定软件在当前时间两分分钟后禁用
if (!IsInstalled())
{
CTime t = CurTime + CTimeSpan(0,0,2,0);   
SetLimitTime(t.GetYear(),t.GetMonth(),t.GetDay(),
         t.GetHour(),t.GetMinute(),t.GetSecond());
}
else
{
//如果软件不是第一次运行,
//则读取注册表中的时间值,与当前时间比较,
//如果当前时间值超过了软件使用期限,则退出,否则正常启动
CTime LimitTime;
GetLimitTime(LimitTime);
if (CurTime>LimitTime)
{
AfxMessageBox("试用版已到期,请联系购买一个正版使用",MB_OK);
return FALSE;
}
}
}
//---------------------------------------------------------------------------
BOOL CTimeLimitApp::IsInstalled()
{
BOOL bInstalled = FALSE;
DWORD dwDisposition;
HKEY m_hKey;
//打开注册表
LONG ret = RegCreateKeyEx (HKEY_LOCAL_MACHINE, "SOFTWARE\\TimeLimit", 0L, NULL,
REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &m_hKey, &dwDisposition);
    if (ret != ERROR_SUCCESS)    //打开注册表失败
return FALSE;
//从注册表中读入特征值
DWORD dwVal,dwType,dwLen;
ret = RegQueryValueEx(m_hKey, "Installed", NULL, 
&dwType,(unsigned char*)&dwVal,&dwLen);
    if (ret != ERROR_SUCCESS)      //读取数据失败
return FALSE;                        
//检查读到的特征值是否为1,如果是,则表明软件以前已运行过
bInstalled = (dwVal == 1);
//关闭注册表
RegCloseKey(m_hKey);
return bInstalled;
}
//------------------------------------------------------------------
BOOL CTimeLimitApp::GetLimitTime(CTime& t)
{
DWORD dwDisposition;
HKEY m_hKey;
//打开注册表
LONG ret = RegCreateKeyEx (HKEY_LOCAL_MACHINE, "SOFTWARE\\TimeLimit", 0L, NULL,
REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &m_hKey, &dwDisposition);
    if (ret != ERROR_SUCCESS)    //打开注册表失败
return FALSE;
//从注册表中读入试用期限数据
DWORD nYear,nMonth,nDay,nHour,nMinute,nSecond;
DWORD dwType;
DWORD dwLen;
ret = RegQueryValueEx (m_hKey, "Year", NULL,    //读取年份
&dwType,(unsigned char*)&nYear,&dwLen);
    if (ret != ERROR_SUCCESS)      //读取数据失败
return FALSE;                        
ret = RegQueryValueEx (m_hKey, "Month", NULL,    //读取月份
&dwType,(unsigned char*)&nMonth,&dwLen);
    if (ret != ERROR_SUCCESS)      //读取数据失败
return FALSE;                        
ret = RegQueryValueEx (m_hKey, "Day", NULL,    //读取天
&dwType,(unsigned char*)&nDay,&dwLen);
    if (ret != ERROR_SUCCESS)      //读取数据失败
return FALSE;                        
ret = RegQueryValueEx (m_hKey, "Hour", NULL,    //读取小时
&dwType,(unsigned char*)&nHour,&dwLen);
    if (ret != ERROR_SUCCESS)      //读取数据失败
return FALSE;                        
ret = RegQueryValueEx (m_hKey, "Minute", NULL,    //读取分钟
&dwType,(unsigned char*)&nMinute,&dwLen);
    if (ret != ERROR_SUCCESS)      //读取数据失败
return FALSE;                        
ret = RegQueryValueEx (m_hKey, "Second", NULL,    //读取秒
&dwType,(unsigned char*)&nSecond,&dwLen);
    if (ret != ERROR_SUCCESS)                         //读取数据失败
return FALSE;                        
//关闭注册表
RegCloseKey(m_hKey);
t = CTime(nYear,nMonth,nDay,nHour,nMinute,nSecond);
return TRUE;
}
//-------------------------------------------------------------------------------------
BOOL CTimeLimitApp::SetLimitTime(DWORD nYear,DWORD nMonth,DWORD nDay,
              DWORD nHour,DWORD nMinute,DWORD nSecond)
{
    DWORD dwDisposition;
HKEY m_hKey;
//打开注册表
LONG ret = RegCreateKeyEx (HKEY_LOCAL_MACHINE, "SOFTWARE\\TimeLimit", 0L, NULL,
REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &m_hKey, &dwDisposition);
    if (ret != ERROR_SUCCESS)    //打开注册表失败
return FALSE;
//向注册表中写入试用期限数据
ret = RegSetValueEx (m_hKey, "Year", NULL,      //写入年
REG_DWORD,(CONST BYTE*)&nYear,sizeof(DWORD));
    if (ret != ERROR_SUCCESS)  &

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 怎样限定软件的使用期限?

相关文章

  • 2017-06-05 VC++环境用MSComm控件实现计算机与GSM模块串口通信
  • 2017-06-04 求教activex里添加toolbar
  • 2017-06-04 关于Activex安全性问题如何防止非法调用~~
  • 2017-06-05 怎么取成员变量的函数作为beginthread的线程函数?
  • 2017-06-05 两个进程间发送消息的问题?
  • 2017-06-05 MSCommocx控件//Invalidpropertyvalue什么含义
  • 2017-06-04 高手来说说DNA架构和NET架构的异同,适用范围以及未来方向。。。
  • 2017-06-05 有没有一个小的示例代码可以简单的说明一下自动化?
  • 2017-06-04 如何开发一个视频播放器?
  • 2017-06-04 请问要怎么样设置word打印控制的密码和打印份数

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 串口接收数据readfile函数疑问??
    • 如何将已有的MFC对话框程序转化成ActiveX?
    • 我用ATL做了一个COM组件,在delphi调用。如果修改了接口idl文件中函数的位置运行不会根据函数名执行,而是根据最早的idl函数位置执行
    • 解决了有高分,在VC中动态库怎样写这样的函数呢?
    • ie加载项与注册表的关系
    • ALT写的NT服务
    • STA和MTA线程模式的区别,大家讨论下。
    • webbrowser获得部分网页并按照原样显示出来
    • SOS,崩溃啊,在对话框中添加了一个OCX控件,对话狂无法弹出,是什么原因,求各位高人指点?
    • 谁能不用进程介入法截取2000下的星号密码?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有