📄 20010628001.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>利用C++ Builder为计算机增加启动日志</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content="Microsoft FrontPage 4.0" name=GENERATOR></HEAD>
<BODY aLink=#ff0000 bgColor=#ffffff leftMargin=0 link=#187800 topMargin=0
vLink=#990099>
<DIV align=center>
<TABLE border=0 cellPadding=0 cellSpacing=0 height=76 width=744>
<TBODY>
<TR>
<TD>
<TABLE align=center width=680>
<TBODY>
<TR>
<TD align=middle>
<H2 align=center><FONT size=3>利用C++
Builder为计算机增加启动日志</FONT></H2><BR><B>郑永凡</B> </TD></TR></TBODY></TABLE><BR>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>公用机房或办公室中的计算机通常是大家共享使用的,作为管理者或“主要”使用者很想掌握机器何时被开启使用过,若有一个启动记录就可以随时了解这些情况。本文给出如何用C++
Builder
5实现这样一个程序的编制,使每次启动计算机即执行本程序,在注册表中记录开机时间等信息,以便随时通过注册表编辑器查看。程序特点:每次启动计算机都要执行一次(这一功能由本程序自动完成而不必手工在注册表中添加,只需运行一次程序即可),为增加隐蔽性,该程序为后台运行的无窗体程序。</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14><FONT size=4><B>编程要点:</B></FONT></TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>1. 在C++ Builder 5环境中建立新工程文件:执行菜单命令File/New
Application,然后将工程文件另存为“Logon.bpr”。</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>2. 执行菜单命令Project/View
Source,打开Logon.cpp文件,将其中的</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>USEFORM(“Unit1.cpp”, Form1);</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>和</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Application->CreateForm(__classid(Tform1),
&Form1);</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>两条语句删除,目的是创建无窗体程序。</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>3. 文件Logon.cpp的全部代码如下:</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>#include <VCL.H></TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>#include <REGISTRY.HPP>//添加行</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>#pragma hdrstop</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>USERES("logon.res");</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR,
int)</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>{</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>try</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>{ //添加部分开始</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>int num=0;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>TRegistry *Registry = new TRegistry;
//创建注册表堆对象指针</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Registry->RootKey = HKEY_USERS;
//定位注册表根键</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>if(!Registry->OpenKey(".DEFAULT\\Logon\\Records",
false))</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>{ //如果打开主键失败</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Registry->CreateKey(".DEFAULT\\Logon\\Records");
//创建主键</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>if(!(Registry->OpenKey(".DEFAULT\\Logon\\Records",
false)))</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>return 0;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>else</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>{ </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>TRegistry *Reg = new TRegistry; // ①
</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Reg->RootKey =
HKEY_LOCAL_MACHINE;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>Reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",false);</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Reg->WriteString("Logon",Application->ExeName);
//在注册表中注册本程序</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Reg->CloseKey();</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>delete Reg; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Application->MessageBox("登录程序注册成功!","结果",MB_OK); //
②</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Registry->WriteInteger("开机次数",num);
</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>Registry->WriteString("程序注册时间",Date()+Time());</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>return 0;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>}</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>}</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>else</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>{</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>num = Registry->ReadInteger("开机次数"); //
③</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Registry->WriteInteger("开机次数",num+1);
//记录开机次数</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>Registry->WriteString("第"+AnsiString(num+1)+"次开机",Date()+Time());
//记录开机时间</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>}</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Registry->CloseKey();</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>delete Registry;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>//添加部分结束</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Application->Initialize();</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Application->Run();</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>}</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>catch (Exception &exception)</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>{</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>Application->ShowException(&exception);</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>}</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>return 0;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>}</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>其中从语句①到②的程序段将在注册表中产生如图1的效果,</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14></TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD align=middle class=a14><IMG height=301
src="images/01_6_21_3a.gif" width=513
tppabs="http://www.info365.com.cn/develop/bcb/img/01_6_21_3a.gif"></TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>在此登录的程序将在每次启动计算机时被执行一次。之后,每次启动计算机都在注册表中记录启动信息如图2所示,只要打开注册表编辑器即可查看计算机使用信息。</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14></TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD align=middle class=a14><IMG height=297
src="images/01_6_21_3b.gif" width=475
tppabs="http://www.info365.com.cn/develop/bcb/img/01_6_21_3b.gif"></TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14><FONT size=4><B>应用:</B></FONT></TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>利用此法,将上述相关代码移植到其它C++
Builder应用程序中,通过读写注册表对程序的使用加以限制,比如限制使用程序次数:30次,只要在上述代码③处增加一条if语句</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>if(num==30)</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>{</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Application->MessageBox(“本程序已经使用30次,将要退出!!”, “警告:”,
MB_OK);</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>return 0;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>}</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>即可(删除①到②行的语句段),编写限制版的应用程序。当然也可以考虑对时间的限制,这只要在注册表中暗设“机关”就行。</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>为了生成单独的EXE文件,应激活Project/Options…菜单项,去掉标签“Linker”下的“Use
dynamic RTL”选项,同时去掉“Packages”标签下的“Build with runtime
packages”选项。将此文件Logon.exe复制到需要记录的机器上的一个固定的文件夹中(比如,windows文件夹),执行一次即可完成程序的注册。</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -