怎样在VC++中访问和修改注册表

Windows95/98/Me的注册表包含了Windows95/98/Me的系统配置、PC机的硬件配置、Win32应用程序和用户的其他设置信息。注册表和INI文件不同,它是多层次的树状数据结构,具有六个分支(根键),每个分支又由许多的键和键值组成,而每个键则代表一个特定的配置项目。

在实际编程工作中,我们遇到了如何在Visual C++中对Windows95/98/Me注册表整个树状结构信息进行访问和修改的问题,如查询和修改注册表中用户姓名和公司名称的有关信息。通过编程实践,我们实现了在Visual C++中查询和修改系统注册表的有关信息。下面以一个实例说明具体的编程方法。

在Visual C++ 6.0或5.0环境中新建一基于对话框的工程,设置两个命令按钮,名为“查询用户信息”和“修改用户信息”,用来查询和修改注册表中用户姓名和公司名称。这里须要指出的是,用户的信息位于系统注册表中 \HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ 的位置,键值名RegisteredOwner和RegisteredOrganization分别表示用户的姓名和用户公司的名称。

1.查询用户信息的代码

HKEY hKEY; //定义有关的 hKEY, 在查询结束时要关闭。
LPCTSTR data_Set="Software\\Microsoft\\Windows\\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("错误: 无法查询有关注册表信息!");
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("错误: 无法查询有关注册表信息!");
return;
}
// 将 owner_Get 和 company_Get 转换为 CString 字符串, 以便显示输出。
CString str_owner=CString(owner_Get);
CString str_company=CString(company_Get);
delete[] owner_Get; delete[] company_Get;
// 程序结束前要关闭已经打开的 hKEY。
::RegCloseKey(hKEY);
……

这样,上述程序执行完毕,字符串str_owner和str_company则表示查询到的用户的姓名和公司的名称,在VC++中便可用对话框的方式将其显示出来。

2.修改用户信息的代码

注意和上述的查询代码属于不同的函数体。

在程序中我们先显示一个对话框,要求用户输入新的用户姓名和公司名称并按确认键,将取得CString类型的有关字符串。要先将其转换为LPBYTE(即unsigned char*)型的数据类型,以便后面的函数调用。下面是程序中用到的将CString型转换为LPBYTE的转换函数:

LPBYTE CString_To_LPBYTE(CString str)
{
LPBYTE lpb=new BYTE[str.GetLength()+1];
 
for(int i=0; ibr>   lpb[str.GetLength()]=0;
return lpb;
}

时间: 2016-10-15

怎样在VC++中访问和修改注册表的相关文章

电脑中如何通过修改注册表来设置网络连接备注

电脑中如何通过修改注册表来设置网络连接备注   1.按Win+R打开运行,输入regedit,点击确定或者回车,打开注册表编辑器; 2.依次展开:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionNetworkListProfiles,在Profiles展开项下的带有{}的项都是网络名称,图示里只有{FA9CBB77-BBD0-406E-9959-499F7D3E0593},点击{FA9CBB77-BBD0-406E-9959-

Win7中如何通过修改注册表将IE设置为默认浏览器

  不知各位是否有遇到过将IE设置为默认浏览器失效的问题,特别是Win7系统下经常会失败,这个时候通常的方法是直接去修改注册表. 将注册表的[HKEY_CLASSES_ROOThttpshellopencommand]修改为IE浏览器地址路径.但其实这只设置了http协议的默认打开程序,有时候并不能所有程序都生效,比如说在QQ面板中点邮箱之类的,还是默认使用别的浏览器.是不是很郁闷,其实win7注册表中与默认浏览器设置相关的键和xp并不一样,我们需要修改两个地址. 首先,在[HKEY_CLASS

修改注册表提高xp上网速度

Windows XP对宽带连接速度进行了限制,是否意味着我们可以改造操作系统,得到更快的上网速度呢? 答:现在宽带网络正逐步走入家庭,得到广泛的应用,但是有的宽带网用户的网页浏览速度.上传及下载速度还不尽如人意.其实在Windows 2000或XP中,通过修改注册表,我们可以让宽带网的速度有大幅的提高,真正享受极速上网的乐趣. 运行"regedit",以打开"注册表管理器";然后,按以下路径找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentCon

修改注册表实现Win7系统启动加速

有很多第三方优化辅助类软件,可以帮助用户为Windows XP系统启动加速.虽然目前也有针对Windows 7系统优化提速的软件,但此类软件一直都存在"优化过头,导致部分系统功能丢失",被Windows Vista和Windwos 7等用户看做"远远不够成熟"的辅助类软件. 在第三方优化软件"不够成熟"的情况下,部分用户转向挖掘Windows 7系统潜能,借助修改注册表的方式,达到加快系统启动速度的目的. 运行注册表编辑器,依次展开到分支HKEY

电脑中通过修改注册表解决网页无法添加到收藏夹的方法

  电脑中通过修改注册表解决网页无法添加到收藏夹的方法.最近有不少用户反映在电脑中出现了无法添加网页到收藏夹的问题,尝试了各种方法都无法解决这个问题.对此,在接下来的内容中,小编为大家提供了一种通过修改注册表解决网页无法添加到收藏夹的方法,大家可以参考一下. 1.按Win+R打开运行,输入regedit并按回车键; 2.在注册表编辑器依次展开HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/UserShell

修改注册表在右键菜单中添加清空文件夹命令

  本文介绍用修改注册表的方法在右键菜单中添加清空文件夹命令.很多时候,你可能需要清空文件夹中的内容,但希望继续保留文件夹中原来的结构,如果逐一打开各个文件夹进行文件删除,确实比较麻烦.其实,我们可以在右键菜单中添加相关的命令,以后操作起来就方便多了. 打开注册表编辑器,依次定位到"HKEY_CLASSES_ROOTFoldershell",右击选择"新建→项",新建一个名为"清空文件夹内容"的子项,接下来右击该项,继续新建一个名为"c

dos(cmd)中删除、添加、修改注册表命令_DOS/BAT

regedit的运行参数 REGEDIT [/L:system] [/R:user] filename1 REGEDIT [/L:system] [/R:user] /C filename2 REGEDIT [/L:system] [/R:user] /E filename3 [regpath] /L:system Specifies the location of the SYSTEM.DAT file. /R:user Specifies the location of the USER.D

修改注册表加强Win 2000安全

安全|注册表 DefaultTTL REG_DWORD 0-0xff(0-255 十进制,默认值128) 说明:指定传出IP数据包中设置的默认生存时间(TTL)值.TTL决定了IP数据包在到达目标前在网络中生存的最大时间.它实际上限定了IP数据包在丢弃前允许通过的路由器数量.有时利用此数值来探测远程主机操作系统. 2.防止ICMP重定向报文的攻击说明:该参数控制Windows 2000是否会改变其路由表以响应网络设备(如路由器)发送给它的ICMP重定向消息,有时会被利用来干坏事.Win2000中

修改注册表以增强网络功能

网络|注册表 我们可以把注册表看成是一个庞大的数据库,它收集了系统所有软硬件的配置与状态信息以及与用户相关的各种设置信息,对系统的正常运行起着至关重要的作用.如果我们是网吧或者公共机房的系统维护员的话,就应该充分利用注册表在网络方面的特有功能,来加强局域网的实用性或者上网冲浪的效率.今天,笔者就注册表在网络方面上的应用搜集整理了一部分操作技巧,希望这些技巧能对大家有所用处. 1.在局域网中隐藏服务器通常,我们在局域网中,利用网上邻居可以看到当前有哪些计算机正在工作,从而可以共享这些计算机上的资源