用VC++修改注册表----让我们踏出第一步(适合初学者)

用VC++修改注册表----让我们踏出第一步(适合初学者)
转载自:www.csdn.net
  开场白

       你是不是非常期待通过自己的双手,写出一个有模有样的"系统修改(维护)工具软件"?我想答案应该是肯定的!而你也许也知道,这些工具所包含的很多功能,其实都是仰赖Windows注册表;通过修改注册表可以实现对系统相关参数的修改.也许这样讲来,你还是觉得不着边际,好,不要急,让我以这篇文章,告诉你一些你必须知道的事情,在你能够真正动手修改注册表之前.我假定这篇文章的读者是初学者,我尽量用最简单的笔调来讲述如何修改注册表,为的是使你即刻明白如何做,我绝不会故弄玄虚。但当然,你必须对Windows操作系统有一定认知,并具备基本的VC
++编程基础(如果不是这样,建议你就此打住,不要再往下看了--我不想浪费你的时间).

注册表到底是什么东西?

 

    注册表到底是什么东西?也许它经常在你的口头出现,但我现在要你即刻讲出来它到底是什么东西,有些什么用,如何产生作用?你能吗?如果不能,请耐心看完这部分;否则,请跳过之。

        Windows的注册表包含了Windows的系统配置、PC机的硬件配置、Win32应用程序和用户的其他设置信息。注册表和INI文件不同,它是多层次的树状数据结构,具有六个分支(根键),每个分支又由许多的键和键值组成,而每个键则代表一个特定的配置项目。最直观的一个实例就是,为什么Windows下的不同用户可以拥有各自的个性化设置,如不同的墙纸,不同的桌面。这就是通过注册表来实现的。

你必须清楚的几个词:

主键:(在NT下又称为项)你可以认为这是整个注册表结构中的一层,有点儿类似于资源管理器中的目录树结构。所以它的图标与文件夹的图标有点儿想像

字符串值:顾名思义,一串ASCII码字符。

二进制值:这没啥多说的,0101是也!

实例要出场了!

       你如何知道要实现你想要的功能必须经由修改注册表的哪一项来做到呢?哦,市面有一大堆的"罗列"注册表各项的书(其实是手册),随便去挑一本吧,我保证你掏得起这个腰包.

       实际编程的过程中你会遇到两个问题:一个是如何访问(读取)注册表,另一个是如何修改注册表,而往往最吸引人的恐怕是后者.让我们用实例来说话!

  假设你现在要实现的编程任务是,从注册表获知本机的用户名,以及公司名称。然后,将它们改成你想要指定的名称。

在Visual C
++ 6.0中新建一基于对话框的工程,设置两个命令按钮,名为“Inquire”和“Modify”,分别用来查询和修改。

说明:用户的信息位于系统注册表中 \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; 

以下则是具体的修改注册表用户信息的代码: 
CString str_owner, str_company; 
…… 
//通过对话框输入新的用户信息,保存到str_owner和str_company 
//定义有关的 hKEY, 在程序的最后要关闭。 
HKEY hKEY;  
LPCTSTR data_Set
="Software\\Microsoft\\Windows\\CurrentVersion"

转载于:https://www.cnblogs.com/yjm0105/archive/2005/05/26/162887.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Repeater分页

//ASP.NET中的DataList和Repeater提供了简单快速的方法來显示,其间&#xff0c;我们可以使用<ItemTemplate>更是使我们能随心所欲的控制数据的排放样式&#xff01;//.可惜的是它们不像Datagrid那样&#xff0c;有内置的分页功能。////如何解决呢&#xff1f;////其实我们…

单一职责在.NET中

单一职责是降低耦合度的指导思想&#xff0c;适用于一个微服务&#xff0c;一个类型&#xff0c;一个方法。微服务层&#xff1a;微服务一般按业务的领域来进行拆分&#xff1a;药房微服务就是药房的业务&#xff0c;护士站微服务就是护士站的业务&#xff0c;广义上没有什么问…

PDG转PDF的方法

下面是我在“小文论坛”发的关于PDG转PDF的办法转贴请注明出自“小文论坛”.点击链接访问小文论坛前些天在坛子里看到一位朋友发的通过代理登录教育网超星的办法,试了试,还不错,下下来了几本吉他方面和计算机方面的书。但下下来的书是加密保存的&#xff0c;当该用户过期后又怎…

Roslyn 使用 Directory.Build.props 管理多个项目配置

在一些大项目需要很多独立的仓库来做&#xff0c;每个仓库之间都会有很多相同的配置&#xff0c;本文告诉大家如何通过 Directory.Build.props 管理多个项目配置在我的 MVVM 框架需要三个不同的库&#xff0c;一个是 Framework 另外两个是 WPF 和 UWP 这三个库有很多重复的配置…

java 中符号_谁能告诉我java中符号的用法,见代码

展开全部大家都知道Vector以及其他的容器可以不加任何修饰地e68a8462616964757a686964616f31333236373765存储任何类型的对象,这给我们带来了极大的方便&#xff0c;也使得容器很容易被复用&#xff0c;但是大多数时候我们可能需要只能存储某一类型对象的Vector&#xff0c;这是…

彻底堕落了一回——大三篇

转载于:https://www.cnblogs.com/wuwa/archive/2005/06/21/6191772.html

在.NET Core中使用Channel(一)

我最近一直在熟悉.net Core中引入的新Channel<T>类型。我想在它第一次发布的时候我了解过它&#xff0c;但是有关文章非常非常少&#xff0c;我不能理解它们与其他队列有什么不同。在使用了一段时间后&#xff0c;我终于看到了它们的吸引力和真正的力量。最值得注意的是大…

java控制系统音量_Java 控制 Windows 系统音量-Go语言中文社区

目录1、使用 Java 来控制 Windows 系统音量&#xff0c;使用 JNA 调用 windows 底层 API 因为有点麻烦&#xff0c;所以这里采用纯 Java API结合 VBS 脚本的方式进行控制。2、可以参考《VBS 控制 Windos 系统音量 及视频播放》&#xff0c;本文同样是利用 VBS 来控制&#xff0…

无题

今天开会&#xff0c;其实不开都知道要讲啥&#xff0c;教代会上就是讨论关于薪金的问题&#xff0c;钱拿的越来越少&#xff0c;所以要想拿钱的话只有写论文&#xff0c;带比赛&#xff0c;或参加比赛&#xff0c;获奖后才能有钱发&#xff0c;哎~~~昨天晚上xz说她确定要ky&am…

【Hook】postman工具的代码生成工具让它锦上添花

修改postman工具的代码生成工具加入response自动生成POJO代码如上图可以快速把请求这个动作转成code&#xff0c;减少重复性劳动。但是有一点我觉得可以优化下 就是返回的json如果也能自动转成代码就好了。不然在需要把json序列化成java或者csharp的POJO对象时还得自己coding转…

2005/7/15[随便写写]

通过面试开始在公司正式上班了&#xff0c;去的很早&#xff0c;呵呵&#xff0c;以为里面的员工都需要敲卡的&#xff0c;不想给大家一个坏印象。环境么给我的感觉氛围很不错&#xff0c;没有传统IT行业那种被项目赶得焦头烂额的样子&#xff0c;可是我的性格决定了我不是那种…

java nature_Java Nature.nsf方法代码示例

import com.hankcs.hanlp.corpus.tag.Nature; //导入方法依赖的package包/类/*** 执行识别* param segResult 粗分结果* param wordNetOptimum 粗分结果对应的词图* param wordNetAll 全词图*/public static void Recognition(List segResult, WordNet wordNetOptimum, WordNet…

使用BeetleX.ESDoc构建文档搜索功能

BeetleX.ESDoc组件是基于ElasticSearch服务的文档搜索扩展组件。它在BeetleX.Elasticsearch的基础上包装一些基于文档检索的功能和方法&#xff0c;可以让你在不了解ElasticSearch API的情况下直接存储&#xff0c;删除和搜索相关信息。信息结构BeetleX.ESDoc定义了一个基础的文…

java在文件的后面添加_java 在file的尾部添加数据的两种方法总结

java 在file的尾部添加数据的两种方法总结问题描述:在文件的末尾追加内容方法1:利用RandomAccessFile类1.将randomAccessFile模式设置为rw2将randomAccessFile移动(seek)到文件末尾3追加数据4关闭流方法2:利用FileWriter类1.将FileWriter构造方法第二个参数置为true.表示在尾部…

日产汽车源码遭泄露

喜欢就关注我们吧&#xff01;日产北美公司开发和使用的移动应用及内部工具的源代码于近日在网上泄露&#xff0c;原因是该公司错误配置了其中一台 Git 服务器。瑞士软件工程师 Tillie Kottmann 向 ZDNet 透露&#xff0c;此次泄露源于一台配置错误的 Bitbucket Git 服务器的信…

开源纯C#轻量级数据库引擎:SharpHSQL 1.0.3.0版本

开源纯C#轻量级数据库引擎&#xff1a;SharpHSQL 1.0.3.0版本出了&#xff12;个多月了&#xff0c;我一直没有给大家报道&#xff0c;这是目前唯一发现的用纯C#开发的稳定的轻量级数据库引擎&#xff0c;在我的建议下&#xff0c;已经支持Unicode&#xff0c;包括简体中文了。…

mysql约束深入了解_MySQL 的约束

约束是添加在列上, 用来约束列的!1. 主键约束(表中的某行的唯一标识)主键的特点:非空唯一被引用创建表时, 指定主键的两种方式&#xff1a;// 需求: 指定 sid 列为主键列, 即为 sid 列添加主键约束// 第一种方式:CREATE TABLE stu(sid CHAR(6) PRIMARY KEY,sname VARCHAR(20),a…

中台的故事结束了?

大家好&#xff0c;我是Z哥。所谓30年河东30年河西&#xff0c;最近阿里开始去中台了。这是不是意味着中台时代的落幕&#xff0c;去中心化时代的开始&#xff1f;谁都说不准。但是我们可以来思考一下这个事情背后释放出了什么样的信号。对我们普通人&#xff0c;特别是互联网行…

[ZT]C#的多线程机制探索(2)

三.线程的同步和通讯——生产者和消费者假设这样一种情况&#xff0c;两个线程同时维护一个队列&#xff0c;如果一个线程对队列中添加元素&#xff0c;而另外一个线程从队列中取用元素&#xff0c;那么我们称添加元素的线程为生产者&#xff0c;称取用元素的线程为消费者。…

java树算法_Java数据结构算法(三)树

本文旨作于收集整理使用&#xff01;&#xff01;导航一、树树(Tree)是n(n≥0)个结点的有限集&#xff0c;n0称之为空树。在非空树种&#xff1a;当有且仅有一个特定的称为根(Root)的结点&#xff1b; 其余结点可以划分为m(m&#xff1e;0)个互不相交的有限集T1、T2 、…、Tm&a…