-
c语言入门之用C++ Builder为计算机增加启动日志
公用机房或办公室中的计算机通常是大家共享使用的,作为管理者或“主要”使用者很想掌握机器何时被开启使用过,若有一个启动记录就可以随时了解这些情况。本文给出如何用C++ Builder 5实现这样一个程序的编制,使每次启动计算机即执行本程序,在注册表中记录开机时间等信息,以便随时通过注册表编辑器查看。程序特点:每次启动计算机都要执行一次(这一功能由本程序自动完成而不必手工在注册表中添加,只需运行一次程序即可),为增加隐蔽性,该程序为后台运行的无窗体程序。
编程要点:
1. 在C++ Builder 5环境中建立新工程文件:执行菜单命令File/New Application,然后将工程文件另存为“Logon.bpr”。
2. 执行菜单命令Project/View Source,打开Logon.cpp文件,将其中的
USEFORM(“Unit1.cpp”, Form1);
和
Application->CreateForm(__classid(Tform1), &Form1);
两条语句删除,目的是创建无窗体程序。
3. 文件Logon.cpp的全部代码如下:
#include
#include //添加行
#pragma hdrstop
USERES("logon.res");
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{ //添加部分开始
int num=0;
TRegistry *Registry = new TRegistry; //创建注册表堆对象指针
Registry->RootKey = HKEY_USERS; //定位注册表根键
if(!Registry->OpenKey(".DEFAULT\\Logon\\Records", false))
{ //如果打开主键失败
Registry->CreateKey(".DEFAULT\\Logon\\Records"); //创建主键
if(!(Registry->OpenKey(".DEFAULT\\Logon\\Records", false)))
return 0;
else
{
TRegistry *Reg = new TRegistry; // ①
Reg->RootKey = HKEY_LOCAL_MACHINE;
Reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",false);
Reg->WriteString("Logon",Application->ExeName); //在注册表中注册本程序
Reg->CloseKey();
delete Reg;
Application->MessageBox("登录程序注册成功!","结果",MB_OK); // ②
Registry->WriteInteger("开机次数",num);
Registry->WriteString("程序注册时间",Date()+Time());
return 0;
}
}
else
{
num = Registry->ReadInteger("开机次数"); // ③
Registry->WriteInteger("开机次数",num+1); //记录开机次数
Registry->WriteString("第"+AnsiString(num+1)+"次开机",Date()+Time()); //记录开机时间
}
Registry->CloseKey();
delete Registry;
//添加部分结束
Application->Initialize();
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
应用:
利用此法,将上述相关代码移植到其它C++ Builder应用程序中,通过读写注册表对程序的使用加以限制,比如限制使用程序次数:30次,只要在上述代码③处增加一条if语句
if(num==30)
{
Application->MessageBox(“本程序已经使用30次,将要退出!!”, “警告:”, MB_OK);
return 0;
}
即可(删除①到②行的语句段),编写限制版的应用程序。当然也可以考虑对时间的限制,这只要在注册表中暗设“机关”就行。
为了生成单独的EXE文件,应激活Project/Options…菜单项,去掉标签“Linker”下的“Use dynamic RTL”选项,同时去掉“Packages”标签下的“Build with runtime packages”选项。将此文件Logon.exe复制到需要记录的机器上的一个固定的文件夹中(比如,windows文件夹),执行一次即可完成程序的注册。
编程要点:
1. 在C++ Builder 5环境中建立新工程文件:执行菜单命令File/New Application,然后将工程文件另存为“Logon.bpr”。
2. 执行菜单命令Project/View Source,打开Logon.cpp文件,将其中的
USEFORM(“Unit1.cpp”, Form1);
和
Application->CreateForm(__classid(Tform1), &Form1);
两条语句删除,目的是创建无窗体程序。
3. 文件Logon.cpp的全部代码如下:
#include
#include //添加行
#pragma hdrstop
USERES("logon.res");
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{ //添加部分开始
int num=0;
TRegistry *Registry = new TRegistry; //创建注册表堆对象指针
Registry->RootKey = HKEY_USERS; //定位注册表根键
if(!Registry->OpenKey(".DEFAULT\\Logon\\Records", false))
{ //如果打开主键失败
Registry->CreateKey(".DEFAULT\\Logon\\Records"); //创建主键
if(!(Registry->OpenKey(".DEFAULT\\Logon\\Records", false)))
return 0;
else
{
TRegistry *Reg = new TRegistry; // ①
Reg->RootKey = HKEY_LOCAL_MACHINE;
Reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",false);
Reg->WriteString("Logon",Application->ExeName); //在注册表中注册本程序
Reg->CloseKey();
delete Reg;
Application->MessageBox("登录程序注册成功!","结果",MB_OK); // ②
Registry->WriteInteger("开机次数",num);
Registry->WriteString("程序注册时间",Date()+Time());
return 0;
}
}
else
{
num = Registry->ReadInteger("开机次数"); // ③
Registry->WriteInteger("开机次数",num+1); //记录开机次数
Registry->WriteString("第"+AnsiString(num+1)+"次开机",Date()+Time()); //记录开机时间
}
Registry->CloseKey();
delete Registry;
//添加部分结束
Application->Initialize();
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
应用:
利用此法,将上述相关代码移植到其它C++ Builder应用程序中,通过读写注册表对程序的使用加以限制,比如限制使用程序次数:30次,只要在上述代码③处增加一条if语句
if(num==30)
{
Application->MessageBox(“本程序已经使用30次,将要退出!!”, “警告:”, MB_OK);
return 0;
}
即可(删除①到②行的语句段),编写限制版的应用程序。当然也可以考虑对时间的限制,这只要在注册表中暗设“机关”就行。
为了生成单独的EXE文件,应激活Project/Options…菜单项,去掉标签“Linker”下的“Use dynamic RTL”选项,同时去掉“Packages”标签下的“Build with runtime packages”选项。将此文件Logon.exe复制到需要记录的机器上的一个固定的文件夹中(比如,windows文件夹),执行一次即可完成程序的注册。
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
JavaScript判断两个数组相等的四类方法
js如何操作video标签
React实战--利用甘特图和看板,强化Paas平
【记录】正则替换的偏方
前端下载 Blob 类型整理
抽象语法树AST必知必会
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程