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

怎样在VC++中访问和修改注册表 (转)[@more@] 广东省惠州市皓天计算机技术 粟利民 windows95/98/Me的注册表包含了Windows95/98/Me的 系统 配置、PC机的 硬件配置、 win32应用 程序用户的其他设置信息。注册表和INI 文件不同,它是多层次的树状数据结构,具有六个分支(根键),每个分支又由许多的键和键值组成,而每个键则代表一个特定的配置项目。 在实际 编程工作中,我们遇到了如何在Visual C++中对Windows95/98/Me注册表整个树状结构信息进行访问和修改的问题,如查询和修改注册表中用户姓名和公司名称的有关信息。通过编程实践,我们实现了在Visual C++中查询和修改系统注册表的有关信息。下面以一个实例说明具体的编程方法。 在Visual C++ 6.0或5.0环境中新建一基于对话框的工程,设置两个命令按钮,名为“查询用户信息”和“修改用户信息”,用来查询和修改注册表中用户姓名和公司名称。这里须要指出的是,用户的信息位于系统注册表中 HKEY_LOCAL_MACHINESoftware microsoftWindowsCurrentVersion 的位置,键值名RegisteredOwner和RegisteredOrganization分别表示用户的姓名和用户公司的名称。 1.查询用户信息的代码 HKEY hKEY; //定义有关的 hKEY, 在查询结束时要关闭。 LPCTSTR data_Set="SoftwareMicrosoftWindowsCurrentVersion"; //打开与路径 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]; D word 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; } 以下则是具体的修改注册表用户信息的代码: CString str_owner, str_company; …… //通过对话框输入新的用户信息,保存到str_owner和str_company //定义有关的 hKEY, 在程序的最后要关闭。 HKEY hKEY; LPCTSTR data_Set="SoftwareMicrosoftWindowsCurrentVersion"; //打开与路径 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; } 执行上面的修改注册表的操作后,可打开注册表查看具体的数值,可以看到已经成功地修改了有关的数据了。 以上实例讲述了如何在VC++中访问Windows98/95的系统注册表,我们可以很方便地查询及修改注册表的任何位置的有关信息。以上的程序在Visual C++ 6.0中 调试通过(Visual C++5.0与之类似),且运行结果正确。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-989904/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-989904/

MFC 注册表操作(新增,删除,读取,修改 MFC 注册表操作 demo(新增,删除,读取,修改) 代码简单不复杂,适合初学者 立即下载

相关推荐

mfc 对话框托盘、气泡、读写注册表、控制鼠标键盘、定时器

本程序适合vc初学者学习使用,软件实现鼠标位置的获取,屏幕大小的获取,鼠标指定位置单击,单击间隔次数可以设置,定时器的使用,这是一个对话框程序,实现了托盘、气泡、读写注册表,系统热键的使用等等 在vc60下编译通过,在vc60下对NOTIFYICONDATA等定义做了修改 shellapi.h的(Tray notification definitions)做了修改, 关于shellapi.h的定义可以参考其他文章,或者注释ShowBalloonTip(气泡)功能 并在stdaf.h的最前面增加 #ifndef _WIN32_IE // 允许使用 IE 4.0 或更高版本的特定功能。 #define _WIN32_IE 0x0500 // 为 IE 5.0 及更新版本改变为适当的值。

MFC 读写注册表

创建或打开注册表项: 使用 或 方法来创建或打开一个注册表项。写入值: 使用 , , 等方法来写入不同类型的值。关闭注册表项: 使用 方法关闭注册表项。打开注册表项: 使用 方法打开一个注册表项。读取值: 使用 , , 等方法来读取不同类型的值。关闭注册表项: 使用 方法关闭注册表项。以下是一个简单的示例,展示了如何在MFC中读写注册表: 在这个示例中:请记住,当你在读写注册表时,特别是在 其他系统级别的键时,你可能需要管理员权限。同时,错误处理非常重要,以确保你的应用在遇到无法访问或不存在的

chenhao0568的专栏 1787

MFC注册表编程 CRegKey类

这里面的代码我都实验过了,都可以用的,我用的是VS2005 如果有什么不明白的地方,欢迎留言,共同讨论

MFC-读写注册表

http://blog.csdn.net/qq_18297675/article/details/51005034 注册表内部结构: key->subkey->value->名称,类型,数据 函数: RegCreateKey() RegCreateKeyEx() RegOpenKey() RegOpenKeyEx() RegSetValue() Re

CSDNMicrosoftCSDN的专栏 3569

MFC操作注册表的两种方法(方法二超简单 )

操作注册表的两种方法实现 方法一:一般操作注册表的方法 注册表内部结构: key->subkey->value->名称,类型,数据 函数: RegCreateKey() RegCreateKeyEx() RegOpenKey() RegOpenKeyEx() RegSetValue() RegSetValueEx() RegQueryValue() Reg...

c1learning的博客 4784

在VC++中访问修改系统注册表 ()

在VC++中访问修改系统注册表 ()[@more@](广东 粟利民 孙强)   windows95/98的注册表包含了Windows95/98的系统配置、PC机的硬件配置、win32应用程序用户的其他设置信息。注册表IN...

csd3176的博客 167

VC++访问修改系统注册表 作者:陈伟 ()

VC++访问修改系统注册表 作者:陈伟 ()[@more@]在VC++访问修改系统注册表 作者:陈伟 发布时间:2001/05/14 文章摘要:   在实际的编程工作中,我们遇到了如何在Visual C++中对w...

csd3176的博客 121

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

Windows95/98/Me的注册表包含了Windows95/98/Me的系统配置、PC机的硬件配置、Win32应用程序用户的其他设置信息。注册表INI文件不同,它是多层次的树状数据结构,具有六个分支(根键),每个分支又由许多的键键值组成,而每个键则代表一个特定的配置项目。 在实际编程工作中,我们遇到了如何在Visual C++中对Windows95/98/Me注册表整个树状结构信息进行访

Piggy and Jery 's GOLB 943

VC++访问修改注册表

VC++访问修改注册表 Windows95/98/Me的注册表包含了Windows95/98/Me的系统配置、PC机的硬件配置、Win32应用程序用户的其他设置信息。注册表INI文件不同,它是多层次的树状数据结构,具有六个分支(根键),每个分支又由许多的键...

didan3807的博客 173

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

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 Windows95/98/Me的注册表包含了Windows95/98/Me的系统配置、PC机的硬件配置、Win32应用程序用户的其他设置信息。注

编程爱好者 879

如何在VC++中使用注册表

 如何在VC++中使用注册表    如今修改注册表成为继超频之后的又一大热点,许多CFAN通过对注册表修改使Win98显得更加个性化,诸多报刊杂志也纷纷扯起注册表这面旗帜,令人遗憾的是,在介绍注册表修改的众多的文章中,大都以手工修改为例,极少数文章也只介绍有关修改注册表软件的用法,至于如何在程序中实现却无人提及。为此我在Visual Studio6.0帮助文件中用Registry

柴门的编程学习基地 2059

C++修改注册表信息

开场白       你是不是非常期待通过自己的双手,写出一个有模有样的"系统修改(维护)工具软件"?我想答案应该是肯定的!而你也许也知道,这些工具所包含的很多功能,其实都是仰赖Windows注册表;通过修改注册表可以实现对系统相关参数的修改.也许这样讲来,你还是觉得不着边际,好,不要急,让我以这篇文章,告诉你一些你必须知道的事情,在你能够真正动手修改注册表之前.我假定这篇文章的读者是初学者,我

湛蓝的天空下有一道美丽的影子 5857

VC++访问修改系统注册表 作者:陈伟

VC++访问修改系统注册表 作者:陈伟 发布时间:2001/05/14  文章摘要:  在实际的编程工作中,我们遇到了如何在Visual C++中对Windows95/98注册表整个树状结构信息进行访问修改的问题,如查询修改注册表中用户姓名公司名称的有关信息。通过编程实践,我们实现了在Visual C++中查询

CandyCat的专栏 2558

VC++修改注册表实现禁用开启U盘

一、使用Vc++下 的MFC框架实现此功能 1.如何禁用U盘 网上给出的答案是通过修改注册表可以禁用U盘; 详细步骤: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR 修改start值为4 参考: https://jingyan.baidu.com/article/22fe7ced747ab37002617fe2.html 2.如何利用VC++调用WindowsAPI接口实现 先看看可能用到哪些Windows API: Reg

weixin_44627672的博客 880

MFC读取修改注册表信息

这里须要指出的是,用户的信息位于系统注册表中\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ 的位置,键值名RegisteredOwnerRegisteredOrganization分别表示用户的姓名用户公司的名称。这样,上述程序执行完毕,字符串str_ownerstr_company则表示查询到的用户的姓名公司的名称,在VC++中便可用对话框的方式将其显示出来。MessageBox("错误: 无法打开有关的hKEY!

qq_35986034的博客 2118
上一篇: 使用ADO执行存储过程 (转)
下一篇: 在VC++ 6.0下利用消息实现内部进程通讯 (转)
csd3176
博客等级 码龄11年 20粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值