📄 csdn_文档中心_在vc++中访问和修改系统注册表.htm
字号:
<SCRIPT src="CSDN_文档中心_在VC++中访问和修改系统注册表.files/microsoft.js"></SCRIPT>
</TD>
<TD align=middle width=620>
<TABLE bgColor=#eeeeee border=0 cellPadding=0 cellSpacing=0 width=600>
<TBODY>
<TR bgColor=#ffffff>
<TD align=middle height=10 width=50></TD>
<TD align=right><A href="http://www.csdn.net/">CSDN</A> - <A
href="http://www.csdn.net/develop/">文档中心</A> - <FONT
color=#003399>Visual C++</FONT> </TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>标题</FONT></TD>
<TD><B> 在VC++中访问和修改系统注册表</B> jadedrip(转贴)
</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
<TD width=500> 在VC++中访问和修改系统注册表</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>出处</FONT></TD>
<TD height=10> <A
href="http://www.cpcw.com/">http://www.cpcw.com/</A></TD></TR>
<TR>
<TD align=middle height=10></TD>
<TD height=10></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
<TABLE border=0 width=600>
<TBODY>
<TR>
<TD align=left><BR>(广东 粟利民 孙强)
<BR><BR> Windows95/98的注册表包含了Windows95/98的系统配置、PC机的硬件配置、Win32应用程序和用户的其他设置信息。注册表和INI文件不同,它是多层次的树状数据结构,具有六个分支(根键),每个分支又由许多的键和键值组成,而每个键则代表一个特定的配置项目。<BR><BR> 在实际的编程工作中,我们遇到了如何在Visual
C++中对Windows95/98注册表整个树状结构信息进行访问和修改的问题,如查询和修改注册表中用户姓名和公司名称的有关信息。通过编程实践,我们实现了在Visual
C++中查询和修改系统注册表的有关信息。下面以一个实例说明具体的编程方法。<BR><BR> 在Visual C++
6.0或5.0环境中新建一基于对话框的工程,设置了两个命令按钮,名为“查询用户信息”和“修改用户信息”,用来查询和修改注册表中用户姓名和公司名称。这里须要指出的是,用户的信息位于系统注册表中
\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\
的位置,键值名RegisteredOwner和RegisteredOrganization分别表示用户的姓名和用户公司的名称。<BR><BR> 1.查询用户信息的代码<BR> HKEY
hKEY; //定义有关的 hKEY, 在查询结束时要关闭。<BR> LPCTSTR
data_Set=″Software\\Microsoft\\Windows\\CurrentVersion\\″;<BR> //打开与路径
data_Set 相关的
hKEY,第一个参数为根键名称,第二个参数表。<BR> //表示要访问的键的位置,第三个参数必须为0,KEY_READ表示以查询的方式。<BR> //访问注册表,hKEY则保存此函数所打开的键的句柄。<BR> long
ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set, 0, KEY_READ,
&hKEY));<BR> if(ret0!=ERROR_SUCCESS)
//如果无法打开hKEY,则终止程序的执行<BR> {MessageBox(″错误:
无法打开有关的hKEY!″);<BR> return;}<BR> //查询有关的数据 (用户姓名
owner_Get)。<BR> LPBYTE owner_Get=new BYTE[80];<BR> DWORD
type_1=REG_SZ ; DWORD cbData_1=80;
<BR> //hKEY为刚才RegOpenKeyEx()函数所打开的键的句柄,″RegisteredOwner″。<BR> //表示要查
询的键值名,type_1表示查询数据的类型,owner_Get保存所。<BR> //查询的数据,cbData_1表示预设置的数据长度。<BR>long
ret1=::RegQueryValueEx(hKEY, ″RegisteredOwner″, NULL,<BR> &type_1,
owner_Get,
&cbData_1);<BR> if(ret1!=ERROR_SUCCESS)<BR> {<BR> MessageBox(″错误:
无法查询有关注册表信息!″);<BR> return;<BR> }<BR> // 查询有关的数据 (公司名
company_Get)<BR> LPBYTE company_Get=new BYTE [80];<BR> DWORD
type_2=REG_SZ; DWORD cbData_2=80; <BR> long
ret2=::RegQueryValueEx(hKEY, ″RegisteredOrganization″,
NULL,&type_2,company_Get,
&cbData_2);<BR> if(ret2!=ERROR_SUCCESS)<BR> {<BR> MessageBox(″错误:
无法查询有关注册表信息!″);<BR> return;<BR> }<BR> // 将 owner_Get 和
company_Get 转换为 CString 字符串, 以便显示输出。<BR> CString
str_owner=CString(owner_Get);<BR> CString
str_company=CString(company_Get);<BR> delete[] owner_Get; delete[]
company_Get;<BR> // 程序结束前要关闭已经打开的
hKEY。<BR> ::RegCloseKey(hKEY);<BR> ……<BR> 这样,上述程序执行完毕,字符串str_owner和str_company则表示查询到的用户的姓名和公司的名称,在VC++中便可用对话框的方式将其显示出来。<BR><BR> 2.
修改用户信息的代码(注意和上述的查询代码属于不同的函数体)<BR> 在程序中我们先显示一个对话框,要求用户输入新的用户姓名和公司名称并按确认键,将取得CString类型的有关字符串。要先将其转换为LPBYTE(即unsigned
char*)型的数据类型,以便后面的函数调用。下面是程序中用到的将CString型转换为LPBYTE的转换函数:<BR> LPBYTE
CString_To_LPBYTE(CString str)<BR> {<BR> LPBYTE lpb=new
BYTE[str.GetLength()+1]; <BR> <str.GetLength();
i++)lpb[i]=str[i];><BR> for(int i=0; ibr>
lpb[str.GetLength()]=0;<BR> return
lpb;<BR> }<BR> 以下则是具体的修改注册表用户信息的代码:<BR> CString str_owner,
str_company;<BR> ……
//通过对话框输入新的用户信息,保存到str_owner和str_company<BR> //定义有关的 hKEY,
在程序的最后要关闭。<BR>HKEY hKEY; <BR> LPCTSTR
data_Set=″Software\\Microsoft\\Windows\\CurrentVersion″;<BR> //打开与路径
data_Set 相关的hKEY,KEY_WRITE表示以写的方式打开。<BR> long
ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE, <BR> data_Set, 0,
KEY_WRITE,
&hKEY));<BR> if(ret0!=ERROR_SUCCESS)<BR> {<BR> MessageBox(″错误:
无法打开有关的hKEY!″);<BR> return;<BR> }<BR> //修改有关数据(用户姓名
owner_Set),要先将CString型转换为LPBYTE。<BR> LPBYTE
owner_Set=CString_To_LPBYTE(str_owner);<BR> DWORD
type_1=REG_SZ;<BR> DWORD cbData_1=str_owner.GetLength()+1;
<BR> //与RegQureyValueEx()类似,hKEY表示已打开的键的句柄,″RegisteredOwner″<BR> //表示要访问的键值名,owner_Set表示新的键值,type_1和cbData_1表示新值。<BR> //的数据类型和数据长度<BR> long
ret1=::RegSetValueEx(hKEY, ″RegisteredOwner″, NULL,<BR> type_1,
owner_Set,
cbData_1);<BR> if(ret1!=ERROR_SUCCESS)<BR> {<BR> MessageBox(″错误:
无法修改有关注册表信息!″);<BR> return;<BR> }<BR> //修改有关的数据 (公司名
company_Set)<BR> LPBYTE
company_Set=CString_To_LPBYTE(str_company);<BR> DWORD
type_2=REG_SZ; <BR> DWORD cbData_2=str_company.GetLength()+1;
<BR> long ret2=::RegSetValueEx(hKEY, ″RegisteredOrganization″,
NULL,<BR> type_2, company_Set,
cbData_2);<BR> if(ret2!=ERROR_SUCCESS)<BR> {<BR> MessageBox(″错误:
无法修改有关注册表信息!″);<BR> return;<BR>
}<BR><BR> 执行上面的修改注册表的操作后,可打开注册表查看具体的数值,可以看到已经成功地修改了有关的数据了。<BR><BR> 以上实例讲述了如何在VC++中访问Windows98/95的系统注册表,我们可以很方便地查询及修改注册表的任何位置的有关信息。以上的程序在Visual
C++ 6.0中调试通过(Visual C++
5.0与之类似),且运行结果正确。<BR><BR>摘自《电脑报》<BR><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0
width=770>
<TBODY>
<TR bgColor=#006699>
<TD align=middle bgColor=#006699 id=white><FONT
color=#ffffff>对该文的评论</FONT></TD>
<TD align=middle>
<SCRIPT src="CSDN_文档中心_在VC++中访问和修改系统注册表.files/readnum.htm"></SCRIPT>
</TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_在VC++中访问和修改系统注册表.files/ico_pencil.gif" width=16>
</SPAN> xhjxhjjj <I>(2000-11-13 14:34:08)</I>
</TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>我不知道修改注册表的意义。我认为应该写明。
总的说来是一篇比较好的文章!! <BR></TD></TR></TBODY></TABLE><BR>
<DIV align=center>
<TABLE align=center bgColor=#cccccc border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TH bgColor=#006699 id=white><FONT
color=#ffffff>我要评论</FONT></TH></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD>你没有登陆,无法发表评论。 请先<A
href="http://www.csdn.net/member/login.asp?from=/Develop/read_article.asp?id=1246">登陆</A>
<A
href="http://www.csdn.net/expert/zc.asp">我要注册</A><BR></TD></TR></TBODY></TABLE></DIV><BR>
<HR noShade SIZE=1 width=770>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=500>
<TBODY>
<TR align=middle>
<TD height=10 vAlign=bottom><A
href="http://www.csdn.net/intro/intro.asp?id=2">网站简介</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=5">广告服务</A> - <A
href="http://www.csdn.net/map/map.shtm">网站地图</A> - <A
href="http://www.csdn.net/help/help.asp">帮助信息</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=2">联系方式</A> - <A
href="http://www.csdn.net/english">English</A> </TD>
<TD align=middle rowSpan=3><A
href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG
border=0 height=48 src="CSDN_文档中心_在VC++中访问和修改系统注册表.files/biaoshi.gif"
width=40></A></TD></TR>
<TR align=middle>
<TD vAlign=top>百联美达美公司 版权所有 京ICP证020026号</TD></TR>
<TR align=middle>
<TD vAlign=top><FONT face=Verdana>Copyright © CSDN.net, Inc. All rights
reserved</FONT></TD></TR>
<TR>
<TD height=15></TD>
<TD></TD></TR></TBODY></TABLE></DIV>
<DIV></DIV><!--内容结束//--><!--结束//--></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -