371上位机VC MFC创建与删除键值项
创建与删除键值项
功能展示
就如文件夹内有很多文件一样,注册表的子键内也有很多键值项,键值项由三部分组成,分别为?:名称、类型、数据,我们当前例程实现键值项的创建与删除功能,效果如图。程序初始化会自动填写子键,键值项名称,及键值项数据,我们只要点击<创建键值项>就可以指定的位置创建一键值项,点击<删除键值项>就可删除先前创建的;
要点提示
创建键值可以用RegSetValueEx函数来实现,它的原型如下:
RegSetValueEx(
hkey, //键句柄,键值项将保存在此键下
lpValueName, //键值项名称
Reserved, //系统保留,指定为0
dwType, //键值项类型
lpDate, //键值项数据
cbDate //键值项长度
);
使用这个函数的时个有一点需要注意,其中参数lpDate和cbDate的值要跟据dwType的值来设定,按常用设置我们分三种情况
(1)当dwType为REG_SZ时,这时跟通常一样,lpDate为要设置的数据,?cbDate为数据的长度。
(2)当dwType为REG_DWORD?时,cbDate必须设为4。
(3)当dwType为REG_BINARY?时,cbDate也必须设为4。?
如果调用时,键值项名称已经存在,则会覆盖原有键值项。如果没有就新建一个。
删除键值可以用RegDeleteValue来实现,它的函数原型如下:
RegDeleteValue(
hkey, //父键句柄
lpValueName //要删除的键值项名称
);
实现功能
1.新建基于对话框的应用程序
2.添加编辑框IDC_EDIT1,IDC_EDIT2,IDC_EDIT3分别对应子键,键值项名称,键值项数据的输入。添加按钮<创建 键值项><删除键值项>关联按钮的点击函数
void CGkbc8Dlg::OnCreate()
{
CString sType = "REG_SZ";//可改为设置用变量
CString sSubKey,sValueName,sValueData;
GetDlgItemText(IDC_EDIT1,sSubKey);
GetDlgItemText(IDC_EDIT2,sValueName);
GetDlgItemText(IDC_EDIT3,sValueData);
if(sSubKey.IsEmpty()||sValueName.IsEmpty()||sValueData.IsEmpty())
return;
HKEY key;
if(RegOpenKeyEx(HKEY_CURRENT_USER,sSubKey,0,KEY_ALL_ACCESS,&key)!=ERROR_SUCCESS)
return;
//<>
if(sType=="REG_SZ")
{
if(RegSetValueEx(key,sValueName,0,REG_SZ, (const unsigned char *)sValueData.GetBuffer(0),MAX_PATH)==ERROR_SUCCESS)
MessageBox("创建成功!");
}
if(sType=="REG_DWORD")
{
if(RegSetValueEx(key,sValueName,0,REG_DWORD,(const unsigned char *)sValueData.GetBuffer(0),4)==ERROR_SUCCESS)//注意数据长度应该设为4
MessageBox("创建成功!");
}
/**//*其它类型的设置......*/
}
void CGkbc8Dlg::OnDelete()
{
CString sSubKey,sValueName;
GetDlgItemText(IDC_EDIT1,sSubKey);
GetDlgItemText(IDC_EDIT2,sValueName);
if(sSubKey.IsEmpty()||sValueName.IsEmpty())
return;
HKEY key;
RegOpenKeyEx(HKEY_CURRENT_USER,sSubKey,0,KEY_WRITE,&key); //打开
if(ERROR_SUCCESS== RegDeleteValue(key,sValueName)) //删除
MessageBox("删除成功!");
}
3.可以选择性的在程序初始化时填充编辑框控件
SetDlgItemText(IDC_EDIT1,"Software\\Microsoft\\Windows\\CurrentVersion\\Run");
SetDlgItemText(IDC_EDIT2,"ValueName");
char cName[_MAX_PATH];
GetModuleFileName(NULL,cName,_MAX_PATH);
SetDlgItemText(IDC_EDIT3,cName);
我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|