C++Builder中注册表的操作 (转载)
2006-02-25 00:08
253 查看
作者: jingtian 发表日期: 2006-01-19 12:40 文章属性: 原创 复制链接 | |||||||||||||||||||||||||||||||||||
首先,先介绍一下TRegistry的属性和方法: 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("DefaultDomainNa a67e me"); //读出域名 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秒,然后在修改注册表中相应的项后退出,释放系统资源。 怎么样?很简单吧!如果我们平时注意收集《电脑报》等报刊杂志上的有关注册表设置的文章,再有了功能强大使用方便的C++Builder,我们也可以写出什么"Windows 超级设置"之类的程序了。 |
相关文章推荐
- C++Builder中注册表的操作 (转载)
- 转载:C#操作注册表
- 转载--c#中操作注册表
- C#操作注册表全攻略(转载)
- VC 注册表操作(转载)
- 【转载】Inno Setup入门(十)——操作注册表
- [转载]用perl操作注册表的一些基本函数
- 利用 .NET 3.0 技术构建互操作保险系统[转载]
- C#操作注册表全攻略
- [转载]子父窗口之间的操作之小例子
- C++builder 多线程下载实际操作
- C++BUILDER的文件操作
- 转载--》java里的io操作
- 一个操作注册表的类
- VB.Net:注册表的简单操作
- 怎么看时序图--nand flash的读操作详解(转载)
- SqlServer中的merge操作(转载)
- Java操作Mongodb(转载)
- VC操作注册表
- <转载>#操作XML(读XML,写XML,更新,删除