`
isiqi
  • 浏览: 16484531 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Vsiaul C#如何读取注册信息

阅读更多
从视窗95开始,微软公司就在视窗系统中引入了注册表这个概念。注册表到底是什么东东呢?它是视窗系统的一个核心的数据库,在这个数据库中存放中与系统相关的各种参数,这些参数直接控制中系统的启动、硬件的驱动程序安装信息以及在视窗系统上运行的各种应用程序的注册信息等。这就意味着,如果注册表因为某些原因受到了破坏,轻者是视窗系统启动过程出现异常,重者就有可能导致整个系统的完全瘫痪。所以正确的认识注册表,及时的备份注册表,对于视窗用户就显得相当重要。

Vsiaul C#就可以十分方便、简洁的开发出操作注册表的程序。本文就是介绍如何利用VisualC#来读取注册表中的信息。

一.初步认识注册表:
单击"开始/运行",在"打开"的后面填入"regedit"。就可以看到注册表的数据结构了。如下图。注:Regedit文件是微软公司提供给用户编辑注册表的一个工具。


图01:注册表结构图示


如上图左边的部分在注册表中称为"主键",据图可见,"主键"是有层次结构的。主键的下一级主键称为该主键的"子键"。每一个主键可以对拥有多个子键。如图所示,右边的这些值就是所谓的键值了。每一个主键或者子键都可以拥有多个键值。注册表是一个庞大的数据库,在其中每一个主键,每一个键值都赋予了不同的功能。

二.Visual C#如何读取注册表中的主键和键值:
在.Net FrameWork SDK Beta 2版中,有一个Microsoft.Win32的名称空间,在此名称空间中提供了二个用于注册表操作的类:Registry类、RegistryKey类。这二个类都是封闭类,不可以继承。在这二个类,定义了许多关于注册表的方法和属性,通过调用这二个类,在Visual C#中就可以比较轻松的处理关于注册表的各种操作了。

(1).Registry类:
此类主要封装了七个公有的静态域,而这些静态域分别代表这视窗注册表中的七个基本的主键,具体如下所示:
Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键
Registry.CurrentUser 对应于HKEY_CURRENT_USER主键
Registry.LocalMachine 对应于 HKEY_LOCAL_MACHINE主键
Registry.User 对应于 HKEY_USER主键
Registry.CurrentConfig 对应于HEKY_CURRENT_CONFIG主键
Registry.DynDa 对应于HKEY_DYN_DATA主键
Registry.PerformanceData 对应于HKEY_PERFORMANCE_DATA主键

(2).RegistryKey类:
此类中主要封装了对视窗系统注册表的基本操作。在程序设计中,首先通过Registry类找到注册表中的基本主键,然后通过RegistryKey类,来找其下面的子键和处理具体的操作的。

三.通过一个读取注册表信息例子来具体说明这二个来的用法:

(1).程序设计和运行的环境:
I视窗系统2000服务器版

II Net FrameWork SDK Beta 2版
(2)在运行程序前的一些必要的处理工作:
在程序设计时,主要功能是读取已经存在的主键键值,用户可以按照下图所示的结构新建若干个主键和对应的键值:


图02:程序设计中要读取的注册表的信息


这里有必要说明的是上图只显示了"新项 #3"子键对应的键值。在"新项 #2"子键也有键值,对应的键值是:"新值#1"为"001","新值 #2"为"002"。在"新项 #1"子键中对应的键值是:"新值 #1"为"aaa","新值 #2"为"bbb"。
(3).程序的主要功能:
程序的主要功能是读取指定主键下面的所有子键和子键拥有的键值,并以列表的形式按层次显示出来,下图是本程序运行后界面:


图03:读取注册表信息并以列表形式显示出来


(4).程序设计过程中的重要步骤以及应该注意的一些问题:

I 程序中读取主键、子键和键值所使用到的方法:
程序中为了读取指定主键下面的子键和子键中拥有的键值,主要使用了RegistryKey类中的四个方法:OpenSubKey,GetSubKeyNames,GetValueNames,GetValue。具体的用法和意思如下:
OpenSubKey ( string name )方法主要是打开指定的子键。
GetSubKeyNames ( )方法是获得主键下面的所有子键的名称,它的返回值是一个字符串数组。
GetValueNames ( )方法是获得当前子键中的所有的键名称,它的返回值也是一个字符串数组。
GetValue ( string name )方法是指定键的键值。
程序中具体的使用语句如下:

1RegistryKey hklm =Registry.LocalMachine ;
2//打开"SYSTEM"子键
3RegistryKey software =hklm.OpenSubKey ( "SYSTEM") ;
4//打开"001"子键
5RegistryKey no1 =software.OpenSubKey ( "001") ;
6//打开"002"子键
7RegistryKey no2 =no1.OpenSubKey ( "002") ;


其中listBox1是程序中定义了的列表名称。
II 如何用列表形式显示注册信息:
由于GetSubKeyNames ( )方法和GetValueNames ( )方法的返回值是字符串数组,所以在程序中是通过foreach语句实现遍历这些字符串数组的。并且在遍历的时候,就通过列表形式显示出来,程序中具体实现语句如下:

1//开始遍历由子键名称组成的字符串数组
2foreach( stringsite inno2.GetSubKeyNames ( ) )
3{
4//在列表中加入子键名称
5listBox1.Items.Add ( site ) ;
6//打开此子键
7RegistryKey sitekey =no2.OpenSubKey ( site ) ;
8//开始遍历由指定子键拥有的键值名称组成的字符串数组
9foreach( stringsValName insitekey.GetValueNames ( ) )
10{
11//在列表中加入键名称和对应的键值
12listBox1.Items.Add ( ""+sValName +": "+sitekey.GetValue ( sValName ) ) ;
13}

14}

(5).源程序代码:
通过以上的论述,我们可以得到程序的源程序代码,具体如下:

1usingSystem;
2usingSystem.Drawing;
3usingSystem.Collections;
4usingSystem.ComponentModel;
5usingSystem.Windows.Forms;
6usingSystem.Data;
7usingMicrosoft.Win32;
8publicclassForm1 : Form
9{
10privateSystem.ComponentModel.Container components;
11privateListBox listBox1;
12privateButton button1;
13publicForm1()
14{
15InitializeComponent();
16}

17//清除在程序中使用过的资源
18publicoverridevoidDispose()
19{
20base.Dispose();
21components.Dispose();
22}

23//初始化程序中使用到的组件
24privatevoidInitializeComponent()
25{
26this.components =newSystem.ComponentModel.Container();
27this.button1 =newButton();
28this.listBox1 =newListBox();
29button1.Location =newSystem.Drawing.Point(16, 320);
30button1.Size =newSystem.Drawing.Size(75, 23);
31button1.TabIndex =0;
32button1.Text ="读取注册表";
33button1.Click +=newSystem.EventHandler(this.button1_Click);
34listBox1.Location =newSystem.Drawing.Point(16, 32);
35listBox1.Size =newSystem.Drawing.Size(496, 264);
36listBox1.TabIndex =1;
37this.Text ="读取主测表信息";
38this.AutoScaleBaseSize =newSystem.Drawing.Size(5, 13);
39this.ClientSize =newSystem.Drawing.Size(528, 357);
40this.Controls.Add(this.listBox1);
41this.Controls.Add(this.button1);
42}

43protectedvoidbutton1_Click(objectsender, System.EventArgs e)
44{
45listBox1.Items.Clear();
46RegistryKey hklm =Registry.LocalMachine;
47RegistryKey software =hklm.OpenSubKey("SYSTEM");
48//打开"SYSTEM"子键
49RegistryKey no1 =software.OpenSubKey("001");
50//打开"001"子键
51RegistryKey no2 =no1.OpenSubKey("002");
52//打开"002"子键
53foreach(stringsite inno2.GetSubKeyNames())
54//开始遍历由子键名称组成的字符串数组
55{
56listBox1.Items.Add(site);
57//在列表中加入子键名称
58RegistryKey sitekey =no2.OpenSubKey(site);
59//打开此子键
60foreach(stringsValName insitekey.GetValueNames())
61//开始遍历由指定子键拥有的键值名称组成的字符串数组
62{
63listBox1.Items.Add(""+sValName +": "+sitekey.GetValue(sValName));
64//在列表中加入键名称和对应的键值
65}

66}

67}

68publicstaticvoidMain()
69{
70Application.Run(newForm1());
71}

72}


四.总结:
用Visual C#来读取注册表中的注册信息是通过名称空间Micorsoft.Win32中的二个类来实现的。在这二个类中还定义了对注册表信息的删除、修改和重命名的一些方法。这些方法比起本文介绍的读取方法、打开方法来说,更具有破坏性,但也更实用。对应这些方法的介绍将在以后的文章中进行。

通过以上的介绍,我们发现用Visual C#来处理注册表,其实是一件比较轻松而简单的事情。事情虽然是轻松的,但我也要提醒各位,由于注册表在视窗系统中的重要作用,所以在每一次对注册表进行操作之前,一定要备份,在操作的时候也要非常小心,因为你的每一次的误操作都可能导致你的系统崩溃。

分享到:
评论

相关推荐

    用C#读取图片的EXIF信息的方法(读取照片ISO等信息原代码)

    C# 读取图片 EXIF 信息的方法 摘要:本文讲述了使用 C# 读取图片的 EXIF 信息的方法,包括读取照片 ISO 感光度、曝光时间、快门速度、闪光灯、曝光模式、照片宽度、高度、f 值、曝光程序、光谱感知、EXIF 版本、...

    c#读取计算机硬件信息生成注册码实现软件注册源码

    c#读取计算机硬件信息生成注册码实现软件注册

    读取文件信息--C#程序

    总的来说,理解和掌握如何在C#中读取文件信息是软件开发的基础,无论是处理文本文件还是二进制文件,都需要对文件I/O有深入的理解。通过熟练运用`FileInfo`和`File`类,以及正确处理编码问题,我们可以有效地读取和...

    c#版读取MP3详细信息

    在C#编程环境中,开发一个WinForm应用来读取MP3文件的详细信息是一项常见的任务。这涉及到多媒体处理,特别是音频文件的元数据提取。在这个项目中,我们使用C#语言,结合WinForm控件来实现这个功能。下面将详细阐述...

    C# 读取DXF全套实例 图形输出 控制台输出 dxf全部信息

    C# 读取DXF全套实例 图形输出 控制台输出 dxf全部信息 FILE NAME: sample.dxf binary DXF: False loading time: 0.447 seconds FILE VERSION: AutoCad2010 FILE COMMENTS: 0 FILE TIME: drawing created (UTC)...

    C#读取.nc文件

    在C#中,通过特定的库或API可以实现对这类数据的读取、写入和操作。 首先,我们需要引入一个支持NetCDF的C#库,例如开源的SharpCDF库。这个库提供了.NET Framework下读写NetCDF文件的功能。安装该库可以通过NuGet包...

    C#读取BIN文件内容

    下面我们将详细讨论如何在C#中读取BIN文件内容,并展示相关的技术知识点。 首先,理解C#中的文件流是至关重要的。文件流是.NET Framework提供的基础类,如`System.IO.FileStream`,它允许我们与磁盘上的文件进行...

    C#读取加密Excel文件

    C# 读取加密的Excel 文件; 有源码,VS2010开发。 采用的是微软的Microsoft.Office.Interop.Excel, V14.0,来读取加密后的Excle文件。 不是采用第三方控件NPOI读取加密的Excel文件。 开始研究NPOI读取加密的Excel文件...

    C#读取记事本txt中的内容

    这是C#中良好的编程实践,可以防止资源泄露。 在`标签`中提到了“勾月”,这可能是指在处理文件时需要注意的一些细节或特定场景。例如,在多线程环境下,可能需要同步访问文件,防止数据冲突。或者,“勾月”可能是...

    C# 读取机器码,CPU序列号,生成注册码类

    根据提供的文件信息,本文将详细解释如何在C#中实现机器码、CPU序列号的读取以及注册码的生成过程。 ### 一、引言 软件注册码是一种常见的软件授权方式,通过绑定特定硬件(如硬盘序列号或CPU序列号)来确保软件...

    2023 C#读取.nc文件

    1. **NetCDF库**:C#中通常使用`SharpCDF`或`C#-netCDF`库来操作NetCDF文件。这些库提供了API,可以方便地读取、写入和修改NetCDF文件。例如,`SharpCDF`库提供了一系列类,如`CdfReader`,用于读取NetCDF文件。 2....

    C# 获取显卡信息 读取显卡硬件信息

    综上所述,获取C#中的显卡信息主要涉及使用WMI API,通过查询`Win32_VideoController`类来获取硬件和驱动程序的相关信息,并根据需要进行数据转换和异常处理。了解这些知识点后,你就可以编写代码来读取并显示系统的...

    基于opc的使用c#读取wincc数据的方法

    使用 C# 语言可以通过 OPC 协议读取 WinCC 中的数据,本文将详细介绍如何使用 C# 读取 WinCC 数据。 OPC 的主要功能是提供了一种标准化的方式来访问和控制工业自动化设备。在 OPC 中,每个设备都被赋予了一个唯一...

    C#读取tif格式图片

    在C#中实现这一功能,我们需要借助于.NET Framework或.NET Core提供的API,以及可能的第三方库。 首先,让我们了解TIFF格式。TIFF是一种灵活的位图图像格式,支持多种压缩算法,如无损LZW压缩和JPEG压缩,且可以...

    TcpEthernet C#读取OMRON PLC实例源码

    6. **数据类型转换**:将PLC中的二进制数据转换为C#中的可读格式,如整数、浮点数等。 7. **状态管理**:保持PLC连接状态的跟踪,确保在需要时能够正确关闭连接。 8. **调试与测试**:在实际环境中对代码进行测试...

    C# 读取数组Json文件

    本篇文章将深入探讨如何在C#中读取包含数组的JSON文件。 首先,我们需要了解JSON的基本结构。一个JSON文件通常包含键值对,可以表示对象或者数组。数组在JSON中用方括号`[]`表示,对象用大括号`{}`表示。例如,一个...

    C#代码读取USB扫描枪信息

    本主题聚焦于如何利用C#来读取USB扫描枪(通常是用于快速输入条形码数据的设备)的信息,并将其自动填充到无焦点的文本框中。这在库存管理、商品销售等场景下非常常见,能够极大地提高数据录入效率。 首先,理解C#...

    C#,BLOB读取操作

    C# 中的 BLOB 读取操作 C# 中的 BLOB(Binary Large OBject)读取操作是指从数据库中读取二进制数据的过程。BLOB 是一种二进制数据类型,用于存储大规模的二进制数据,如图片、音频、视频等。在 C# 中,我们可以...

    C#读取bin文件

    在C#中,我们可以使用FileStream、BinaryReader等类来读取这类文件。 步骤1:打开文件 在C#中,我们通常使用FileStream类来打开一个文件。首先,需要确保文件路径正确,然后创建一个FileStream对象。例如: ```...

Global site tag (gtag.js) - Google Analytics