选择显示字体大小

在vc++中访问和修改系统注册表

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

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

在visual c++ 6.0或5.0环境中新建一基于对话框的工程,设置了两个命令按钮,名为“查询用户信息”和“修改用户信息”,用来查询和修改注册表中用户姓名和公司名称。这里须要指出的是,用户的信息位于系统注册表中 hkey_local_machinesoftwaremicrosoftwindowscurrentversion 的位置,键值名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; i lpb[str.getlength()]=0;

return lpb;

}

以下则是具体的修改注册表用户信息的代码:

cstring str_owner, str_company;

…… //通过对话框输入新的用户信息,保存到str_owner和str_company

//定义有关的 hkey, 在程序的最后要关闭。

hkey hkey;

lpctstr data_set=″software\microsoft\windows\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;

}

执行上面的修改注册表的操作后,可打开注册表查看具体的数值,可以看到已经成功地修改了有关的数据了。

以上实例讲述了如何在vc++中访问windows98/95的系统注册表,我们可以很方便地查询及修改注册表的任何位置的有关信息。以上的程序在visual c++ 6.0中调试通过(visual c++ 5.0与之类似),且运行结果正确。



  


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons