新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 网络学院 > 操作系统 > 注册表 > 注册表编程 > 正文:C++Builder中注册表的操作

C++Builder中注册表的操作

新客网 XKER.COM 2006-06-28 来源: 收藏本文

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页: 上一页 [1] [2] [3] 下一页
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐