注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 操作系统 > Windows > Windows注册表 > 其它技巧 内容正文:C++ Builder中注册表的操作

C++ Builder中注册表的操作

发布时间:2006-01-18 00:00:12 来源: 网友评论 0 条

首先,先介绍一下TRegistry的属性和方法:

TRegistry类一共有四个属性。

属性类型描述
CurrentKeyint包含当前键值的值,但它的意思不太好懂,所以不太常用
RootKeyint当前键值的根键,BCB定义有枚举常量:HKEY_CURRENT_USER、HKEY_CLASSES_ROOT、HKEY_LOCAL_MACHINE、HKEY_USERS、HKEY_CURRENT_CONFIG、HKEY_DYN_DATA、HKEY_USERS。分别对应注册表中相应的主键。生成一个TRegistry类的实例时RootKye缺省值为HKEY_CURRENT_USER
CurrentPathAnsiString当前键值的文本描述,/HKEY_CURRENT_USER/Software/Borland的CurrentPath="Software/Borland",而RootKey=HKEY_CURRENT_USER
LazyWritebool值为true:只要关闭一个键,就立即返回应用程序。值为false:必须写完注册表后才返回。其缺省值为true。

TRegistry类的方法比较多,择其常用的简要说明如下:

方法描述
CloseKey()关闭一个键值并向键值写数据,只要对键值操作完毕后就应该关闭它,不过你可以不必调用此方法,因为TRegistry的析构函数会自动调用它。
DeleteKey(AnsiString)删除? ,参数为要删除的键值,如果参数为空字符串,则删除当前键值
OpenKey(Ansistring,bool)打开一个键值,如果这个键值不存在,将由第二个参数决定是否自动建立。
LoadKey(AnsiString,AnsiString)从文件装入键值,第一个参数为键值,第二个参数为文件名
KeyExists(AnsiString)检测一个键值是否存在。
SaveKey(AnsiString,AnsiString)把一个键值保存到文件,参数说明参见LoadKey()
ReadInteger(AnsiString)读出一个键值为整数,如果失败将抛出异常。同此函数类似的还有ReadBool()、ReadString()、ReadFloat()、ReadDateTome()、ReadBinaryData()等,用来读出不同类型的键值。
ValueExists(AnsiString)检测一个值是否存在。
WriteInteger(AnsiString,int)写一个键值为整数,如果失败将抛出异常。同此函数类似的还有WriteBool()、WriteString()、WriteFloat()、WriteDateTome()、WriteBinaryData()等,用来写入不同类型的键值。

利用TRegistry是很容易的,一般来说,有以下四步操作:

1) 建立TRegistry类

2)利用OpenKey()方法打开一个键值

3)用ReadType()和WriteType()读写键值

4)调用CloseKey()关闭一个键值。

值得注意的是:在使用TRegistry类时,必须要加入此类的头文件:#include$#@60;Rgistry.hpp$#@62;,否则会发生什么,只要稍有C语言基础都会明白。

好了,举一个实例来说明,下面我就以我的《WinNT自动登录》来说明TRegistry类的用法。

WinNT的用户都知道,WinNT在启动时需要按Ctrl+Alt+Del登录,即便没有密码也是如此.虽然WinNT不会象 WIN9X那样经常死机,但每次开机都要这样还是有点烦.能 不能让WinNT每次启动自动登录呢?其实只要把注册表的一 个属性AutoAdminLogon的值设置为"1"即可,可惜的是这 样做只能管一次,每次启动后WinNT就会自动把它的值改为 "0"(该死的Bill!).如果每次都要修改注册表,还不如每次手动登录呢!写个程序在启动后自动修改这个值就OK了。

首先新建一个工程,在窗体放入4个文本框,分别命名为:dUser、edPasswd、edRePasswd、edDomain。分别用来输入用户名、登录口令、重输口令和域,把edPasswd和edRePasswd的PasswordChar属性改为"*"(密码方式输入)。再加入2个复选框来选择是否自动登录(chkAuto)和自动运行(chkAutorun),一个定时器(Timer1),2个按纽(bbtOK、bbtCancel)和一些Label。 

打开代码窗口,在头部输入以下代码:

#include TRegistry ®key=* new TRegistry();//定义全局变量:注册表类。 int delay=0;//定义全局变量,延时时间

然后选择窗体的OnCreat事件,输入以下代码:

regkey.RootKey=HKEY_LOCAL_MACHINE;//设置根键 //打开自动登录所在的键

regkey.OpenKey("SOFTWARE//Microsoft//Windows NT//CurrentVersion//Winlogon",true);

//以下3句打开Windows自动运行的键值。 TRegistry &AutoRun=* new TRegistry(); AutoRun.RootKey=HKEY_LOCAL_MACHINE;

AutoRun.OpenKey("SOFTWARE//Microsoft//Windows//CurrentVersion//Run",true);

if(strlen(CmdLine)>Application->ExeName.Length()+3)//如果带参数运行则是要卸载

{

AutoRun.DeleteValue("Windows NT Auto Logon");//删除自己加入的属性

regkey.DeleteValue("Windows NT Auto Logon"); delete &AutoRun;

Application->Terminate();//终止应用程序 return; } //把本程序写入自动运行。

AutoRun.WriteString("Windows NT Auto Logon",Application->ExeName);

delete &AutoRun;

edDomain->Text=regkey.ReadString("DefaultDomainName"); //读出域名

edUser->Text=regkey.ReadString("DefaultUserName"); //读出用户名

chkAuto->Checked=true;

chkAutorun->Checked=regkey.ReadString("Windows NT Auto Logon")=="1"?true:false; //本程序是否自动运行

edPasswd->Text=regkey.ReadString("DefaultPasswd"); //读出口令

setControl(!chkAutorun->Checked); //如果是自动运行状态把其他屏蔽,反之亦然

if(chkAutorun->Checked)

{

Timer1->Enabled=true; //自动运行开始计时 edRePasswd->Text=edPasswd->Text;

}

}

其中setControl()的功能是屏蔽几个组件,定义如下:

首先在窗体的头文件窗体类定义加入void setControl(bool);

其函数体如下(窗体名为fmMain):

void TfmMain::setControl(bool t)

{

edUser->Enabled= t;

edRePasswd->Enabled= t;

edPasswd->Enabled= t;

edDomain->Enabled= t;

chkAuto->Enabled= t;

}

在chkAutoRun的OnClick事件中根据是否选择了自动运行来决定是否启动定时器

setControl(!chkAutorun->Checked);//如果是自动运行状态把其他屏蔽,反之亦然 if(!chkAutorun->Checked)

{Timer1->Enabled=false;//如果不是自动运行,定时器失效 delay=0;

}

else

Timer1->Enabled=true;//否则定时器有效

在按纽bbtOK的OnClick事件中输入以下代码,其功能是写入注册表。

if(edRePasswd->Text==edPasswd->Text)//如果密码正确

{

regkey.WriteString("DefaultDomainName",edDomain->Text);//写入域名

regkey.WriteString("DefaultUserName",edUser->Text);//写入用户名

regkey.WriteString("AutoAdminLogon",chkAuto->Checked?"1":"0");//写入是否自动登录

regkey.WriteString("Windows NT Auto Logon",chkAutorun->Checked?"1":"0");//写入是否自动运行

regkey.WriteString("DefaultPasswd",edPasswd->Text);//写入密码

if(!chkAutorun->Checked)//如果不自动运行

{

TRegistry &AutoRun=* new TRegistry();

AutoRun.RootKey=HKEY_LOCAL_MACHINE; //找到自动启动

AutoRun.OpenKey("SOFTWARE//Microsoft//Windows//CurrentVersion//Run",true);

AutoRun.DeleteValue("Windows NT Auto Logon");//删除自己加入的属性

delete &AutoRun;

}

Application->Terminate();//程序终止。

}

else

{ShowMessage("密码错误!"); edPasswd->Text="";

}

当程序自动运行时,延时3秒后写入注册表,在Timer1的OnTimer事件中写入如下代码:

delay++; if(delay>=3)//延时三秒到 bbtOK->Click();//单击“确定”按纽,写入注册表

然后在bbtCancel中加入终止程序的代码:Application->Terminate();我们的程序就算完成了,真的完了吗?NO!我们在开始的时侯用new生成了regkey,应该要用delete删除它,所以在窗体的OnClose事件中加入delete &regkey就OK了。

如果选择了自动运行,程序就能在每次启动时延时3秒,然后在修改注册表中相应的项后退出,释放系统资源。



相关文章
    无相关信息
【评论】【收藏本文】【打印】【关闭】
上一篇文章:在VC++中访问和修改系统注册表
下一篇文章:编程解决注册表问题所需的函数详解(1)
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
编程解决注册表问题所需的函数详解
编程解决注册表问题所需的函数详解
清空系统远程可访问的注册表全部路径
清空系统远程可访问的注册表全部路径
推荐阅讯
  • 注册表妙用三则
  • 对注册表进行编程的“捷径”
  • 注册表中常用软件信息查找和备份全攻略
  • 注册表系统优化修改项
  • 最高收藏秘籍:注册表修改项目大全
  • 用NT注册表个性化系统
  • Win98注册表应用三则
  • 修改注册表提高电脑的工作效率
  • 注册表中的“键值数据项”的类型
  • 注册表及其备份与恢复
阅读排行
  • 1.注册表知识:HKEY_LOCAL_MACHINE根键详解
  • 2.浏览网页注册表被修改之迷及解决办法
  • 3.初识注册表
  • 4.收放自如 注册表禁止使用和恢复禁用
  • 5.雕虫小技 教你吓走想要动你电脑的人
  • 6.对注册表进行编辑的三种途径
  • 7.编程解决注册表问题所需的函数详解
  • 8.网上冲浪要小心 不让别人动你的注册表
  • 9.Windows系列操作系统注册表的组成与分析
  • 10.解除封锁注册表被禁用的几种解决办法
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载