版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++辅导:用C++Builder设定程序使用时间爱护方法
本文介绍4种利用C++Builder实现的爱护方法:
利用注册表限制程序使用的天数,比方限制使用30天;
利用注册表限制程序使用的次数,比方限制使用45次;
设定程序使用的截止日期,比方设截止日期为2022年8月31日;
限制每次使用程序的时间,比方一次允许使用50分钟。
这些爱护方式既可以单独使用,也可以几个同时使用实现综合爱护。
编程思路
1.方法1和方法2
在程序主窗体的OnCreate大事过程中,定义注册表TRegistry类对象指针Reg:
TRegistry*Reg=newTRegistry;
通过其属性RootKey定位注册表根键,如:
Reg->RootKey=HKEY_USERS;
//可依据需要选择
利用OpenKey方法翻开根键下的一个自定义主键,例如:
Reg->OpenKey(“.DEFAULT\\Myprogram\\Records”,false)
若该主键不存在(即首次运行本程序时),需要利用CreateKey()方法创立该主键,并将其翻开,写入子键及键值如下:
//“Count”键值记录本程序运行次数
Reg->WriteInteger(“Count”,1);
//“Flag”键值记载本程序使用是否有过期的记录
Reg->WriteInteger(“Flag”,0);
//“First”键值记录首次运行本程序的日期
Reg->WriteDate(“First”,Date());
//“Last”键值记录上一次运行本程序的日期
Reg->WriteDate(“Last”,Date());
通过对“First”键值的读取获得首次运行程序时的日期,再与系统当前的日期进展比拟,推断是否超过指定的天数而打算是否终止程序的运行,从而实现使用天数的限制。通过对“Count”键值的读取获得程序使用的次数,推断是否超过指定的次数而打算是否终止程序的运行,以实现使用次数的限制。
此外,通过读取“Flag”键值可以了解程序是否有过期记录,其值为1表示程序使用已经过期;读取“Last”键值可以取得上一次使用本程序的日期。
假如经过推断没有超过规定的使用期限,则更新“Count”和“Last”的键值:
//使用次数加1
Reg->WriteInteger(“Count”,Reg->ReadInteger(“Count”)+1);
//重新写入当前日期
Reg->WriteDate(“Last”,Date());
2.方法3
直接在主窗体的OnCreate大事过程中推断当前日期是否超过预定的截止日期,打算是否终止程序运行。
3.方法4
利用一个时间组件,在它的OnTimer大事过程中随时检测本次程序运行的时间(从程序启动到当前)是否超过预设的时间,从而打算是否终止程序的运行。
详细实现
1.限制使用天数(如30天)
在主窗体的OnCreate大事过程中参加代码推断程序的使用是否超过30天,若是,则终止程序运行并记录“Flag”键值为1。当前系统日期由VCL库函数Date()猎取。主要代码如下:
//定义日期型对象
TDatefirstDate,currentDate;
//猎取首次运行程序日期
firstDate=Reg->ReadDate(“First”);
//猎取首次运行程序日期
currentDate=Date();
if(currentDate.Val-firstDate.Val>30)
{
Application->MessageBox(“本程序使用已经超过30天!\n将要关闭程序...”,“结果”,MB_OK);
Reg->WriteInteger(“Flag”,1);
//终止程序运行
Application->Terminate();
}
2.限制使用次数(如45次)
在主窗体的OnCreate大事过程中参加代码推断程序的使用是否超过45次,若是,则终止程序运行并记录“Flag”键值为1。主要代码如下:
if(Reg->ReadInteger(“Count”)>45)
{
Application->MessageBox(“本程序使用已经超过了45次!\n程序马上关闭...”,“结果”,MB_OK);
Reg->WriteInteger(“Flag”,1);
Application->Terminate();
}3.设置使用截止日期(如截止日期为2022年8月31日)
该方法不需要修改注册表,在主窗体的OnCreate大事过程中参加如下代码即可:
//定义日期型变量(对象)
TDateendDate,currentDate;
//设置日期分隔符
DateSeparator=‘-”;
//设置日期表达格式
ShortDateFormat=“yyyy/mm/dd”;
currentDate=Date();
//日期转换
endDate=StrToDate(“2022-08-31”);
if(currentDate.Val>endDate.Val)
{
Application->MessageBox(“已经超过期限,本程序已不能使用!\n将要关闭程序...”,“结果”,MB_OK);
file://Reg->WriteInteger(“Flag”,1);
Application->Terminate();
}
4.限制每次使用的时间(如限用50分钟)
该方法不需要修改注册表,在一个TTimer组件的OnTimer大事过程中,随时检测系统当前时间与程序的启动时间之间是否超过50分钟即可。其中程序的启动时间可以在主窗体的OnCreate大事过程中取得,这需要定义日期时间型全局变量startDateTime和currentDateTime:
TDateTimestartDateTime,currentDateTime;
为获得程序的启动时间,在主窗体的OnCreate大事过程中参加如下代码:
startDateTime=Now();
在时间组件的OnTimer大事过程中参加以下代码:
currentDateTime=Now();
if(currentDateTime.Val-startDateTime.Val>50.0/(60*24))
{
//计时器停顿计时,等待消息框关闭
Timer1->Enabled=false;
Application->MessageBox(“本次程序已经运行了50分钟!\n将要关闭程序...”,“结果”,MB_OK);
//关闭程序
Close();
}
几点说明
1.可以将注册表根键定位为其他的键(参见图1),其主键的定义应具有“共性化”,也可以利用已有的主键,层次可以多些,这样隐藏性更好,能限度地爱护应用程序。
2.为了防止倒拨系统时钟至上一次使用程序的日期之前,通过读取“Last”键值可以对此进展检测和处理,代码如下:
TDatelastDate,currentDate;
//获得上一次运行本程序的日期
lastDate=Reg->ReadDate(“Last”);
currentDate=Date();
if(currentDate.ValMessageBox(“系统时钟的日期已被回拨!\n本程序马上关闭...”,“结果”,MB_OK);
Reg->WriteInteger(“Flag”,1);
//终止程序的运行
Application->Terminate();
}
3.一旦“Flag”键值为1,说明程序已经过期,可用以下代码限制再次运行程序:
if(Reg->ReadInte
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医保财务规章制度
- 完善选人用人管人制度
- 审计机关数据库管理制度
- 内部会计审计制度
- 中国绩效审计法律制度
- 内部审计医院会计制度
- 审计联席经济责任制度
- 审计署审计现场管理制度
- 审计现场公厕管理制度范本
- 品质保障部绩效考核制度
- 《先兆流产中西医结合诊疗指南》
- MySQL数据库原理及应用 教学大纲 及 课后习题答案(王坚)
- 2025年度民办非企业单位工作计划
- 《植物生产与环境》考试复习题库
- 【八年级上册地理】一课一练2.2 世界的气候类型 同步练习
- 大学生魅力讲话实操学习通超星期末考试答案章节答案2024年
- 《游园》课件统编版高中语文必修下册
- 【盒马鲜生冷供应链物流成本现状、问题及优化建议探析11000字(论文)】
- HG/T 22820-2024 化工安全仪表系统工程设计规范(正式版)
- 基于人工智能的文化遗产保护与传承策略
- 2022年上海市养老服务综合统计监测报告
评论
0/150
提交评论