如何用Visual C#来创建、修改注册信息

在《 如何读取注册信息》和《 用Visual C#来删除注册表中的注册信息》文章中,已经探讨了用Visual C#来读取、删除注册表中的注册信息,在本篇文章中我们就来介绍Visual C#注册表编程的另外二个重要的操作:创建注册信息和修改注册信息。

在上二篇文章中,我们已经知道,由于Visual C#本身没有类库,他是通过.Net框架中的.Net FrameWork SDK(软件开发包)定义的一些类来实现对注册表的操作。这就是名称空间Microsoft.Win32中封装的二个类:Registry类、RegistryKey类。在RegistryKey类中定义了二个方法用来创建注册表中的主键、子键和键值。他们是CreateSubValue ( )方法和SetValue ( )方法。那么如何用Visual C#来修改注册信息,在本文中,我们只是介绍了修改注册表中的键值的方法。而对于主键和子键,由于.Net FrameWork SDK中还没有定义这方面的方法,所以还无法完成安全的修改注册表中的信息。下面就先介绍如何用Visual C#来创建注册信息。

一.Visual C#创建和修改注册信息要调用的二个方法:
(1).CreateSubKey ( String key )方法:此方法是创建以后面的字符串为名称的子键。当然这种方法不仅能够创建子键,在下面介绍的程序中,也通过此种方法来创建一个主键。

(2).SetValue ( String name , String keyvalue )方法:此方法的作用有二点,一种可以用来重命名键值的数值,一种可以用来创建新的键值。具体情况如下:当打开的子键中,如果存在此键值,就把新值赋给他,实现重命名操作。如果不存在,则创建一个新的键值。

二.程序设计和运行环境以及要准备的工作:
I>视窗系统2000服务器版

II>.Net FrameWork SDK Beta 2版

III>由于在程序中,要修改一个已经存在的键值,所以就要预先设置好键值所在的位置。打开注册表的编辑器,在"HKEY_LOCAL_MACHINE"主键下面的"HARDWARE"子键下面创建"aaa"子键并在此子键下面创建一个名称为"bbb"的键值。具体如下图所示:

三.程序的主要功能以及设计的重要步骤:
在下面介绍的程序中,主要的功能是用Visual C#在注册表中创建一个主键、一个子键和修改一个指定的键值。其中要创建的子键的结构层次是在主键"HKEY_LOCAL_MACHIN"下面的"HAREWARE"主键下,名称为"ddd",其中包含一个键值,名称为"www",键值的值为"1234"。

其中的要创建的主键的结构层次也是在主键"HKEY_LOCAL_MACHIN"下面的"HAREWARE"主键下,名称为"main",在此主键下面包含一个名称为"sub"的子键和名称为"value"键值,键值的值为"1234"。下面就来着重介绍Visual C#是如何创建和修改这些主键、子键和键值的。

(1).如何创建一个子键,在程序中是结合CreateSubKey ( )方法和SetValue ( )方法来实现的,以下是程序中创建子键的源程序:

1 listBox1.Items.Clear ( ) ;
2 RegistryKey hklm =  Registry.LocalMachine ;
3 RegistryKey software =  hklm.OpenSubKey ( " HARDWARE "  , true  ) ;
4 RegistryKey main1 =  software.CreateSubKey ( " main "  ) ;
5 RegistryKey ddd =  main1.CreateSubKey ( " sub "  ) ;
6 ddd.SetValue ( " value "  , " 1234 "  );


(2).如何创建一个主键,创建一个主键和创建一个子键的过程大致是差不多的。由于主键包含若干子键,所以在创建主键的时候必须注意他们的层次关系。下面这一段程序,在参考的时候,请注意一下main键和sub键之间的关系。

1 listBox1.Items.Clear ( ) ;
2 RegistryKey hklm =  Registry.LocalMachine ;
3 RegistryKey software =  hklm.OpenSubKey ( " HARDWARE " , true  ) ;
4 RegistryKey main1 =  software.CreateSubKey ( " main "  ) ;
5 RegistryKey ddd =  main1.CreateSubKey ( " sub "  ) ;
6 ddd.SetValue ( " value "  , " 1234 "  ) ;
7
(3).如何修改注册信息。由于注册表中的信息十分重要,所以一般不要对其进行写的操作。也可能是这个原因,在.Net FrameWork SDK 中并没有提供修改注册表键的方法。而只是提供了一个危害性相对较小的方法--SetValue ( ),通过这个方法,我们可以来修改键值。下面程序代码是修改一个指定键值名称的键值。当然由于SetValue( )方法的特性,如果它检测到这个键值不存在,就会创建一个新的键值。
1 listBox1.Items.Clear ( ) ;
2 RegistryKey hklm =  Registry.LocalMachine ;
3 RegistryKey software =  hklm.OpenSubKey ( " HARDWARE " , true  ) ;
4 RegistryKey dddw =  software.OpenSubKey ( " aaa "  , true  ) ;
5 dddw.SetValue ( " bbb "  , " abcd "  ) ;
 
四.本文中源程序代码( reg.cs )以及编译后的程序运行界面:
 

reg.cs程序代码如下:

   1 using  System;
  2 using  System.Drawing;
  3 using  System.Collections;
  4 using  System.ComponentModel;
  5 using  System.Windows.Forms;
  6 using  System.Data;
  7 using  Microsoft.Win32;
  8 // 导入使用到的名称空间
  9
 10 public   class  Form1 : Form
 11 {
 12    private System.ComponentModel.Container components;
 13    private ListBox listBox1;
 14    private Button button1;
 15    private Button button2;
 16    private Button button3;
 17    private Button button4;
 18
 19    public Form1()
 20    {
 21        InitializeComponent();
 22    }

 23    //清除在程序中使用过的资源
 24    public override void Dispose()
 25    {
 26        base.Dispose();
 27        components.Dispose();
 28    }

 29    //初始化程序中使用到的组件
 30    private void InitializeComponent()
 31    {
 32        this.components = new System.ComponentModel.Container();
 33        this.button1 = new Button();
 34        this.listBox1 = new ListBox();
 35        button1.Location = new System.Drawing.Point(16, 320);
 36        button1.Size = new System.Drawing.Size(90, 23);
 37        button1.TabIndex = 0;
 38        button1.Text = "读取注册表";
 39        button1.Click += new System.EventHandler(this.button1_Click);
 40
 41        this.button2 = new Button();
 42        button2.Location = new System.Drawing.Point(116, 320);
 43        button2.Size = new System.Drawing.Size(90, 23);
 44        button2.TabIndex = 1;
 45        button2.Text = "创建子键";
 46        button2.Click += new System.EventHandler(this.button2_Click);
 47
 48        this.button3 = new Button();
 49        button3.Location = new System.Drawing.Point(216, 320);
 50        button3.Size = new System.Drawing.Size(90, 23);
 51        button3.TabIndex = 2;
 52        button3.Text = "创建主键";
 53        button3.Click += new System.EventHandler(this.button3_Click);
 54
 55        this.button4 = new Button();
 56        button4.Location = new System.Drawing.Point(316, 320);
 57        button4.Size = new System.Drawing.Size(90, 23);
 58        button4.TabIndex = 3;
 59        button4.Text = "重命名键值";
 60        button4.Click += new System.EventHandler(this.button4_Click);
 61
 62        listBox1.Location = new System.Drawing.Point(16, 32);
 63        listBox1.Size = new System.Drawing.Size(496, 264);
 64        listBox1.TabIndex = 4;
 65        this.Text = "用Visual C#来创建和修改注册表中的注册信息!";
 66        this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
 67        this.ClientSize = new System.Drawing.Size(528, 357);
 68        //在窗体中加入组件
 69        this.Controls.Add(this.listBox1);
 70        this.Controls.Add(this.button1);
 71        this.Controls.Add(this.button2);
 72        this.Controls.Add(this.button3);
 73        this.Controls.Add(this.button4);
 74    }

 75    //以列表形式显示"HARDWARE"下面一层的子键和键值
 76    protected void button1_Click(object sender, System.EventArgs e)
 77    {
 78        listBox1.Items.Clear();
 79        RegistryKey hklm = Registry.LocalMachine;
 80        RegistryKey software = hklm.OpenSubKey("HARDWARE");
 81        //打开"SYSTEM"子键
 82        foreach (string site in software.GetSubKeyNames())
 83        //开始遍历由子键名称组成的字符串数组
 84        {
 85            listBox1.Items.Add(site);
 86            //在列表中加入子键名称
 87            RegistryKey sitekey = software.OpenSubKey(site);
 88            //打开此子键
 89            foreach (string sValName in sitekey.GetValueNames())
 90            //开始遍历由指定子键拥有的键值名称组成的字符串数组
 91            {
 92                listBox1.Items.Add(" " + sValName + ": " + sitekey.GetValue(sValName));
 93                //在列表中加入键名称和对应的键值
 94            }

 95        }

 96    }

 97    //创建子键和键值
 98    protected void button2_Click(object sender, System.EventArgs e)
 99    {
100        listBox1.Items.Clear();
101        RegistryKey hklm = Registry.LocalMachine;
102        RegistryKey software = hklm.OpenSubKey("HARDWARE", true);
103        RegistryKey ddd = software.CreateSubKey("ddd");
104        ddd.SetValue("www", "1234");
105    }

106    //创建一个主键并创建一个键值
107    protected void button3_Click(object sender, System.EventArgs e)
108    {
109        listBox1.Items.Clear();
110        RegistryKey hklm = Registry.LocalMachine;
111        RegistryKey software = hklm.OpenSubKey("HARDWARE", true);
112        RegistryKey main1 = software.CreateSubKey("main");
113        RegistryKey ddd = main1.CreateSubKey("sub");
114        ddd.SetValue("value", "1234");
115    }

116    //重命名一个存在的键值
117    protected void button4_Click(object sender, System.EventArgs e)
118    {
119        listBox1.Items.Clear();
120        RegistryKey hklm = Registry.LocalMachine;
121        RegistryKey software = hklm.OpenSubKey("HARDWARE", true);
122        RegistryKey dddw = software.OpenSubKey("aaa", true);
123        dddw.SetValue("bbb", "abcd");
124    }

125    public static void Main()
126    {
127        Application.Run(new Form1());
128    }

129}

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
去年年末才看过一本关于ASP.NET 操作注册表的书,可惜那时候就压根没想过写到网上去。 现在想想 写到网上有诸多好处 比如、 1、可以快速回忆相关知识点,还有自己写的参考代码,比别人写的强多了 2、可以丰富自己的博客推广自己 3、加强自己写作能力 贴出代码了 -------------------- 1、引入命名空间 using Microsoft.Win32;//修改注册表所需要用到的命名空间 2、之后方法喽 //修改注册表 设置IE打印背景图片 适用于IE8一下版本,修改为工具选项下的 打印背景颜色与图像 public void IESetupPrint_Background() { RegistryKey key = Registry.CurrentUser; RegistryKey software = key.OpenSubKey("Software\\Microsoft\\Internet Explorer\\Main", true); //该项必须已存在 software.SetValue("Print_Background", "yes"); software.Close(); } //设置页眉 页脚为空 public void IESetupPageSetup() { RegistryKey key = Registry.CurrentUser; RegistryKey software = key.OpenSubKey("Software\\Microsoft\\Internet Explorer\\PageSetup", true); //该项必须已存在 software.SetValue("header", ""); software.SetValue("footer", ""); software.Close(); } //设置页边距 设置IE页面设置 打印背景图片 //上下边距具体的值可以 先在IE里面设置再查看注册表实际值 然后在程序里写死 public void IESetupPage() { RegistryKey key = Registry.CurrentUser;//IE8以上版本 修改为页面设置 里页面 打印背景颜色与图像 RegistryKey software = key.OpenSubKey("Software\\Microsoft\\Internet Explorer\\PageSetup", true); software.SetValue("margin_top", 0.55984); software.SetValue("margin_bottom", 0.55984); software.SetValue("margin_left", 0.75433); software.SetValue("margin_right", 0.40000); software.SetValue("Print_Background", "yes"); } //查看注册表相应的键值 运行输入 regedit

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值