• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

VC++:访问和修改系统注册表(升级)

发布: 2007-7-01 20:40 | 作者: admin | 来源: | 查看: 13次 | 进入软件测试论坛讨论

领测软件测试网



前言:
   前几天转载了一片名为《VC++:访问和修改系统注册表》的文章,今天有位朋友问到这篇文章的问题,仔细看了一下,有几处错误。现在将其修改并附上源代码,希望给想学习修改注册表的朋友一些帮助。

正文:
  此例以修改用户注册信息(包括用户计算机名和公司名)为例,描述了如何对注册表信息进行查询和修改。原文为http://www.vczx.com/article/show.php?id=629,原文是针对win95和win98系统的,所附源代码是针对win2000系统的,其实只是注册表键值路径不同而已,win95/win98的用户的信息位于系统注册表中HKEY_LOCAL_MACHINE\Software Microsoft\Windows\CurrentVersion\的位置,而win2000系统位于HKEY_LOCAL_MACHINE\Software Microsoft\Windows\CurrentVersion\位置。键值名都是RegisteredOwner和RegisteredOrganization,分别表示用户的姓名和用户公司 的名称。
  代码也比较简单,主要用到了四个API,RegOpenKeyEx打开注册表,RegQueryValueEx查询特定项,RegSetValueEx修改特定项。主要代码片段如下:

查询注册信息:
  HKEY hKEY; //定义有关的 hKEY, 在查询结束时要关闭。
LPCTSTR data_Set="Software\\Microsoft\\Windows NT\\CurrentVersion\\";
//打开与路径 data_Set 相关的 hKEY,第一个参数为根键名称,第二个参数表。
//表示要访问的键的位置,第三个参数必须为0,KEY_READ表示以查询的方式。
//访问注册表,hKEY则保存此函数所打开的键的句柄。
long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set, 0, KEY_READ, &hKEY));
if(ret0!=ERROR_SUCCESS) //如果无法打开hKEY,则终止程序的执行
{MessageBox("错误: 无法打开有关的hKEY!");
return;}
//查询有关的数据 (用户姓名 owner_Get)。
LPBYTE owner_Get=new BYTE[80];
DWORD type_1=REG_SZ ;
DWORD cbData_1=80;
//hKEY为刚才RegOpenKeyEx()函数所打开的键的句柄,″RegisteredOwner″。
//表示要查 询的键值名,type_1表示查询数据的类型,owner_Get保存所。
//查询的数据,cbData_1表示预设置的数据长度。
long ret1=::RegQueryValueEx(hKEY, "RegisteredOwner", NULL, &type_1, owner_Get, &cbData_1);
if(ret1!=ERROR_SUCCESS)
{
MessageBox("错误: 无法查询有关注册表信息!1");
return;
}

//查询有关的数据 (公司名 company_Get)
LPBYTE company_Get=new BYTE[80];
DWORD type_2=REG_SZ; DWORD cbData_2=80;
long ret2=::RegQueryValueEx(hKEY, "RegisteredOrganization", NULL,&type_2,company_Get, &cbData_2);
if(ret2!=ERROR_SUCCESS)
{
MessageBox("错误: 无法查询有关注册表信息!2");
return;
}


修改注册信息:
CString str_owner, str_company;
//通过对话框输入新的用户信息,保存到str_owner和str_company
GetDlgItemText(IDC_EDIT1,str_owner );
GetDlgItemText(IDC_EDIT2,str_company );
//定义有关的 hKEY, 在程序的最后要关闭。
HKEY hKEY;
LPCTSTR data_Set="Software\\Microsoft\\Windows NT\\CurrentVersion\\";
//打开与路径 data_Set 相关的hKEY,KEY_WRITE表示以写的方式打开。
long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_WRITE,&hKEY));
if(ret0!=ERROR_SUCCESS)
{
MessageBox("错误: 无法打开有关的hKEY!");
return;
}
//修改有关数据(用户姓名 owner_Set),要先将CString型转换为LPBYTE。
LPBYTE owner_Set=CString_To_LPBYTE(str_owner);
DWORD type_1=REG_SZ;
DWORD cbData_1=str_owner.GetLength()+1;
//与RegQureyValueEx()类似,hKEY表示已打开的键的句柄,″RegisteredOwner″
//表示要访问的键值名,owner_Set表示新的键值,type_1和cbData_1表示新值。
//的数据类型和数据长度
long ret1=::RegSetValueEx(hKEY, "RegisteredOwner", NULL, type_1, owner_Set, cbData_1);
if(ret1!=ERROR_SUCCESS)
{
MessageBox("错误: 无法修改有关注册表信息!");
return;
}
//修改有关的数据 (公司名 company_Set)
LPBYTE company_Set=CString_To_LPBYTE(str_company);
DWORD type_2=REG_SZ;
DWORD cbData_2=str_company.GetLength()+1;
long ret2=::RegSetValueEx(hKEY, "RegisteredOrganization", NULL,
type_2, company_Set, cbData_2);
if(ret2!=ERROR_SUCCESS)
{
MessageBox("错误: 无法修改有关注册表信息!");
return;
}
MessageBox("修改注册表信息成功!");
}

具体程序,请看源代码。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网