找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 538|回复: 9

[翻译文档] C#若何 读取注册信息

[复制链接]

该用户从未签到

2

主题

7

帖子

8

积分

LV.1

Rank: 1

积分
8
QQ
发表于 2016-5-31 13:33:34 | 显示全部楼层 |阅读模式
从视窗95开端,微软公司就在视窗体系中引进了注册表这个概念。注册表到底是什么东东呢?它是视窗体系的一个焦点的数据库,在这个数据库中寄存中与体系相干的各类参数,这些参数直接把持中体系的启动、硬件的驱动法式安装信息以及在视窗体系上运行的各类利用法式的注册信息等。这就意味着,假如注册表由于某些原因受到了损坏,轻者是视窗体系启动进程呈现异常,重者就有可能导致全部体系的完整瘫痪。所以准确的熟悉注册表,实时的备份注册表,对于视窗用户就显得相当主要。
Vsiaul C#就可以十分便利、简练的开辟出操纵注册表的法式。本文就是先容若何应用VisualC#来读取注册表中的信息。

一.初步熟悉注册表:
单击"开端/运行",在"打开"的后面填进"regedit"。就可以看到注册表的数据构造了。如下图。注:Regedit文件是微软公司供给给用户编纂注册表的一个东西。

点击小图放年夜,图01:注册表构造图示

如上图左边的部门在注册表中称为"主键",据图可见,"主键"是有条理构造的。主键的下一级主键称为该主键的"子键"。每一个主键可以对拥有多个子键。如图所示,右边的这些值就是所谓的键值了。每一个主键或者子键都可以拥有多个键值。注册表是一个宏大的数据库,在此中每一个主键,每一个键值都付与了分歧的功效。

二.Visual C#若何读取注册表中的主键和键值:
在.Net FrameWork SDK Beta 2版中,有一个Microsoft.Win32的名称空间,在此名称空间中供给了二个用于注册表操纵的类:Registry类、RegistryKey类。这二个类都是封锁类,不成以继续。在这二个类,界说了很多关于注册表的方式和属性,经由过程挪用这二个类,在Visual C#中就可以比拟轻松的处置关于注册表的各类操纵了。
(1).Registry类:
此类重要封装了七个公有的静态域,而这些静态域分辨代表这视窗注册表中的七个基础的主键,具体如下所示:

  1. Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键

  2. Registry.CurrentUser 对应于HKEY_CURRENT_USER主键

  3. Registry.LocalMachine 对应于 HKEY_LOCAL_MACHINE主键

  4. Registry.User 对应于 HKEY_USER主键

  5. Registry.CurrentConfig 对应于HEKY_CURRENT_CONFIG主键

  6. Registry.DynDa 对应于HKEY_DYN_DATA主键

  7. Registry.PerformanceData 对应于HKEY_PERFORMANCE_DATA主键 复制代码(2).RegistryKey类:
  8. 此类中重要
    封装了对视窗体系
    注册表的基础
    操纵
    。在法式
    设计中,起首
    经由过程
    Registry类找到注册表中的基础
    主键,然后经由过程
    RegistryKey类,来找其下面的子键和处置
    具体的操纵
    的。

  9. 三.经由过程
    一个读取注册表信息例子来具体阐明
    这二个来的用法:

  10. (1).法式
    设计和运行的情况

  11. I视窗体系
    2000办事
    器版

  12. II Net FrameWork SDK Beta 2版
  13. (2)在运行法式
    前的一些需要
    的处置
    工作:
  14. 在法式
    设计时,重要
    功效
    是读取已经存在的主键键值,用户可以依照
    下图所示的构造
    新建若干个主键和对应的键值:

  15. 点击小图放年夜
    ,图02:法式
    设计中要读取的注册表的信息

  16. 这里有需要
    阐明
    的是上图只显示了"新项 #3"子键对应的键值。在"新项 #2"子键也有键值,对应的键值是:"新值#1"为"001","新值 #2"为"002"。在"新项 #1"子键中对应的键值是:"新值 #1"为"aaa","新值 #2"为"bbb"。
  17. (3).法式
    的重要
    功效

  18. 法式
    的重要
    功效
    是读取指定主键下面的所有子键和子键拥有的键值,并以列表的情势
    按条理
    显示出来,下图是本法式
    运行后界面:

  19. 点击小图放年夜
    ,图03:读取注册表信息并以列表情势
    显示出来

  20. (4).法式
    设计进程
    中的主要
    步调
    以及应当
    留意
    的一些题目


  21. I 法式
    中读取主键、子键和键值所应用
    到的方式

  22. 法式
    中为了读取指定主键下面的子键和子键中拥有的键值,重要
    应用
    了RegistryKey类中的四个方式
    :OpenSubKey,GetSubKeyNames,GetValueNames,GetValue。具体的用法和意思如下:
  23. OpenSubKey ( string name )方式
    重要
    是打开指定的子键。
  24. GetSubKeyNames ( )方式
    是获得主键下面的所有子键的名称,它的返回值是一个字符串数组。
  25. GetValueNames ( )方式
    是获适当
    前子键中的所有的键名称,它的返回值也是一个字符串数组。
  26. GetValue ( string name )方式
    是指定键的键值。
  27. 法式
    中具体的应用
    语句如下:

  28. RegistryKey hklm = Registry.LocalMachine ;

  29. //打开"SYSTEM"子键

  30. RegistryKey softwARe = hklm.OpenSubKey ( "SYSTEM" ) ;

  31. //打开"001"子键

  32. RegistryKey no1 = software.OpenSubKey ( "001" ) ;

  33. //打开"002"子键

  34. RegistryKey no2 = no1.OpenSubKey ( "002" ) ;

  35. 复制代码此中
    listBox1是法式
    中界说
    了的列表名称。
  36. II 若何
    用列表情势
    显示注册信息:
  37. 因为
    GetSubKeyNames ( )方式
    和GetValueNames ( )方式
    的返回值是字符串数组,所以在法式
    中是经由过程
    foreach语句实现遍历这些字符串数组的。而且
    在遍历的时辰
    ,就经由过程
    列表情势
    显示出来,法式
    中具体实现语句如下:

  38. foreach ( string site in no2.GetSubKeyNames ( ) )

  39. //开端
    遍历由子键名称构成
    的字符串数组

  40. {

  41. listBox1.Items.Add ( site ) ;

  42. //在列表中参加
    子键名称

  43. RegistryKey sitekey = no2.OpenSubKey ( site ) ;

  44. //打开此子键

  45. foreach ( string sValName in sitekey.GetValueNames ( ) )

  46. //开端
    遍历由指定子键拥有的键值名称构成
    的字符串数组

  47. {

  48. listBox1.Items.Add ( "" + sValName + ": " + sitekey.GetValue ( sValName ) ) ;

  49. //在列表中参加
    键名称和对应的键值

  50. }

  51. }复制代码(5).源法式
    代码:
  52. 经由过程
    以上的阐述
    ,我们可以获得
    法式
    的源法式
    代码,具体如下:

  53. using System ;

  54. using System.Drawing ;

  55. using System.Collections ;

  56. using System.ComponentModel ;

  57. using System.Windows.Forms ;

  58. using System.Data ;

  59. using Microsoft.Win32 ; public class Form1 : Form

  60. {

  61. private System.ComponentModel.Container components ;

  62. private ListBox listBox1 ;

  63. private Button button1 ;

  64. public Form1 ( )

  65. {

  66. InitializeComponent ( ) ;

  67. }

  68. //肃清
    在法式
    中应用
    过的资本


  69. public override void Dispose ( )

  70. {

  71. base.Dispose ( ) ;

  72. components.Dispose ( ) ;

  73. }

  74. //初始化法式
    中应用
    到的组件

  75. private void InitializeComponent ( )

  76. {

  77. this.components = new System.ComponentModel.Container ( ) ;

  78. this.button1 = new Button ( ) ;

  79. this.listBox1 = new ListBox ( ) ;

  80. button1.Location = new System.Drawing.Point ( 16 , 320 ) ;

  81. button1.Size = new System.Drawing.Size ( 75 , 23 ) ;

  82. button1.TabIndex = 0 ;

  83. button1.Text = "读取注册表" ;

  84. button1.Click += new System.EventHandler( this.button1_Click ) ;

  85. listBox1.Location = new System.Drawing.Point ( 16 , 32 ) ;

  86. listBox1.Size = new System.Drawing.Size ( 496 , 264 ) ;

  87. listBox1.TabIndex = 1 ;

  88. this.Text = "读取主测表信息" ;

  89. this.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) ;

  90. this.ClientSize = new System.Drawing.Size ( 528 , 357 ) ;

  91. this.Controls.Add( this.listBox1 ) ;

  92. this.Controls.Add ( this.button1 ) ;

  93. }

  94. protected void button1_Click ( object sender , System.EventArgs e )

  95. {

  96. listBox1.Items.Clear ( ) ;

  97. RegistryKey hklm = Registry.LocalMachine ;

  98. RegistryKey software = hklm.OpenSubKey ( "SYSTEM" ) ;

  99. //打开"SYSTEM"子键

  100. RegistryKey no1 = software.OpenSubKey ( "001" ) ;

  101. //打开"001"子键

  102. RegistryKey no2 = no1.OpenSubKey ( "002" ) ;

  103. //打开"002"子键

  104. foreach ( string site in no2.GetSubKeyNames ( ) )

  105. //开端
    遍历由子键名称构成
    的字符串数组

  106. {

  107. listBox1.Items.Add ( site ) ;

  108. //在列表中参加
    子键名称

  109. RegistryKey sitekey = no2.OpenSubKey ( site ) ;

  110. //打开此子键

  111. foreach ( string sValName in sitekey.GetValueNames ( ) )

  112. //开端
    遍历由指定子键拥有的键值名称构成
    的字符串数组

  113. {

  114. listBox1.Items.Add ( "" + sValName + ": " + sitekey.GetValue ( sValName ) ) ;

  115. //在列表中参加
    键名称和对应的键值

  116. }

  117. }

  118. }

  119. public static void Main ( )

  120. {

  121. Application.Run ( new Form1 ( ) ) ;

  122. }

  123. }复制代码
复制代码
四.总结:
用Visual C#来读取注册表中的注册信息是经由过程名称空间Micorsoft.Win32中的二个类来实现的。在这二个类中还界说了对注册表信息的删除、修正和重定名的一些方式。这些方式比起本文先容的读取方式、打开方式来说,更具有损坏性,但也更适用。对应这些方式的先容将在今后的文章中进行。
经由过程以上的先容,我们发明用Visual C#来处置注册表,实在是一件比拟轻松而简略的工作。工作固然是轻松的,但我也要提示列位,因为注册表在视窗体系中的主要感化,所以在每一次对注册表进行操纵之前,必定要备份,在操纵的时辰也要很是警惕,由于你的每一次的误操纵都可能导致你的体系瓦解。

该用户从未签到

0

主题

38

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2016-7-19 17:10:17 | 显示全部楼层
竟然还有零回复,给我消失

该用户从未签到

0

主题

32

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2016-7-25 04:35:04 | 显示全部楼层
想了解下AR增强现实的相关内容来看看

该用户从未签到

0

主题

6

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2016-7-29 00:12:26 | 显示全部楼层
楼主辛苦了,帮楼主顶起来

该用户从未签到

0

主题

9

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2016-9-25 02:58:32 | 显示全部楼层
增强现实,增强现实,增强现实。重要的事情说三遍

该用户从未签到

0

主题

15

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2016-10-14 12:03:52 | 显示全部楼层
嗯,很不错的样子!!

该用户从未签到

0

主题

28

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2016-11-18 03:53:22 | 显示全部楼层
看帖怎么能不会呢??

该用户从未签到

0

主题

31

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2017-2-7 00:40:17 | 显示全部楼层
楼主辛苦了。。回帖是一种美德

该用户从未签到

2

主题

24

帖子

11

积分

LV.1

Rank: 1

积分
11
QQ
发表于 2017-2-20 17:29:59 | 显示全部楼层
增强现实希望发展越来越好

该用户从未签到

1

主题

12

帖子

9

积分

LV.1

Rank: 1

积分
9
QQ
发表于 2017-10-24 08:54:02 | 显示全部楼层
楼主写的很不错,关于AR的知识受教了
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表