`
liuzhaohong
  • 浏览: 12417 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

c#检测注册表[转 学习学习~~]

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

一.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 ( )方法来实现的,以下是程序中创建子键的源程序:

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

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

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

(3)如何修改注册信息。由于注册表中的信息十分重要,所以一般不要对其进行写的操作。也可能是这个原因,在.Net FrameWork SDK 中并没有提供修改注册表键的方法。而只是提供了一个危害性相对较小的方法--SetValue ( ),通过这个方法,我们可以来修改键值。下面程序代码是修改一个指定键值名称的键值。当然由于SetValue( )方法的特性,如果它检测到这个键值不存在,就会创建一个新的键值。

listBox1.Items.Clear ( ) ;
RegistryKey hklm = Registry.LocalMachine ;
RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;
RegistryKey dddw = software.OpenSubKey ( "aaa" , true ) ;
dddw.SetValue ( "bbb" , "abcd" ) ;

四.本文中源程序代码( reg.cs )以及编译后的程序运行界面:
以下是程序运行的界面:

reg.cs程序代码如下:

using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
using Microsoft.Win32 ;
//导入使用到的名称空间

public class Form1 : Form
{
private System.ComponentModel.Container components ;
private ListBox listBox1 ;
private Button button1 ;
private Button button2 ;
private Button button3 ;
private Button button4 ;

public Form1 ( )
{
InitializeComponent ( ) ;
}
//清除在程序中使用过的资源
public override void Dispose ( )
{
base.Dispose ( ) ;
components.Dispose ( ) ;
}
//初始化程序中使用到的组件
private void InitializeComponent ( )
{
this.components = new System.ComponentModel.Container ( ) ;
this.button1 = new Button ( ) ;
this.listBox1 = new ListBox ( ) ;
button1.Location = new System.Drawing.Point ( 16 , 320 ) ;
button1.Size = new System.Drawing.Size ( 90 , 23 ) ;
button1.TabIndex = 0 ;
button1.Text = "读取注册表" ;
button1.Click += new System.EventHandler ( this.button1_Click ) ;

this.button2 = new Button ( ) ;
button2.Location = new System.Drawing.Point ( 116 , 320 ) ;
button2.Size = new System.Drawing.Size ( 90 , 23 ) ;
button2.TabIndex = 1 ;
button2.Text = "创建子键" ;
button2.Click += new System.EventHandler ( this.button2_Click ) ;

this.button3 = new Button ( ) ;
button3.Location = new System.Drawing.Point ( 216 , 320 ) ;
button3.Size = new System.Drawing.Size ( 90 , 23 ) ;
button3.TabIndex = 2 ;
button3.Text = "创建主键" ;
button3.Click += new System.EventHandler ( this.button3_Click ) ;

this.button4 = new Button ( ) ;
button4.Location = new System.Drawing.Point ( 316 , 320 ) ;
button4.Size = new System.Drawing.Size ( 90 , 23 ) ;
button4.TabIndex = 3 ;
button4.Text = "重命名键值" ;
button4.Click += new System.EventHandler ( this.button4_Click ) ;

listBox1.Location = new System.Drawing.Point ( 16 , 32 ) ;
listBox1.Size = new System.Drawing.Size ( 496 , 264 ) ;
listBox1.TabIndex = 4 ;
this.Text = "用Visual C#来创建和修改注册表中的注册信息!" ;
this.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) ;
this.ClientSize = new System.Drawing.Size ( 528 , 357 ) ;
//在窗体中加入组件
this.Controls.Add ( this.listBox1 ) ;
this.Controls.Add ( this.button1 ) ;
this.Controls.Add ( this.button2 ) ;
this.Controls.Add ( this.button3 ) ;
this.Controls.Add ( this.button4 ) ;
}
//以列表形式显示"HARDWARE"下面一层的子键和键值
protected void button1_Click ( object sender , System.EventArgs e )
{
listBox1.Items.Clear ( ) ;
RegistryKey hklm = Registry.LocalMachine ;
RegistryKey software = hklm.OpenSubKey ( "HARDWARE" ) ;
//打开"SYSTEM"子键
foreach ( string site in software.GetSubKeyNames ( ) )
//开始遍历由子键名称组成的字符串数组
{
listBox1.Items.Add ( site ) ;
//在列表中加入子键名称
RegistryKey sitekey = software.OpenSubKey ( site ) ;
//打开此子键
foreach ( string sValName in sitekey.GetValueNames ( ) )
//开始遍历由指定子键拥有的键值名称组成的字符串数组
{
listBox1.Items.Add ( " " + sValName + ": " + sitekey.GetValue ( sValName ) ) ;
//在列表中加入键名称和对应的键值
}
}
}
//创建子键和键值
protected void button2_Click ( object sender , System.EventArgs e )
{
listBox1.Items.Clear ( ) ;
RegistryKey hklm = Registry.LocalMachine ;
RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;
RegistryKey ddd = software.CreateSubKey ( "ddd" ) ;
ddd.SetValue ( "www" , "1234" );
}
//创建一个主键并创建一个键值
protected void button3_Click ( object sender , System.EventArgs e )
{
listBox1.Items.Clear ( ) ;
RegistryKey hklm = Registry.LocalMachine ;
RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;
RegistryKey main1 = software.CreateSubKey ( "main" ) ;
RegistryKey ddd = main1.CreateSubKey ( "sub" ) ;
ddd.SetValue ( "value" , "1234" ) ;
}
//重命名一个存在的键值
protected void button4_Click ( object sender , System.EventArgs e )
{
listBox1.Items.Clear ( ) ;
RegistryKey hklm = Registry.LocalMachine ;
RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;
RegistryKey dddw = software.OpenSubKey ( "aaa" , true ) ;
dddw.SetValue ( "bbb" , "abcd" ) ;
}
public static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
}
分享到:
评论

相关推荐

    C# 通过注册表查找安装的软件

    /* *此类用来获取当前是否安装了VS和SharpDevelop *在判断SharpDevelop的时候用了很笨的方法 *就是检测最有可能安装的几个位置 *VS则是通过注册表来判断 *2012-5-14 */

    C#注册表启动项扫描

    标题 "C#注册表启动项扫描" 涉及到的是...通过这个项目,你可以学习到C#对注册表的操作,以及如何整合非托管资源,提升程序的用户体验。这不仅有助于理解系统层面的工作原理,也是提高安全意识和编程技能的良好实践。

    C#修改IE在注册表的安全项(vs2010源码)

    通过学习和理解这个实例,开发者可以了解如何在C#环境下安全地操作注册表,并掌握如何针对特定应用(如IE浏览器)调整系统配置。这对于进行系统维护或开发涉及系统设置调整的应用程序来说是非常有价值的。

    c# 系统检测防火墙,杀毒软件(与迅雷一样检测),系统更新(补丁下载模仿360,可以从官网下载)支持任何系统。此包含源码

    通过阅读和分析这些源代码,可以学习到如何将C#与WMI、注册表和WUA/WSUS接口结合使用。 总结来说,本项目旨在使用C#创建一个系统工具,它能够检查和交互系统防火墙、识别已安装的杀毒软件,并执行类似360的系统更新...

    C#根据cpu序列号、磁盘序列号设计软件注册程序

    标题和描述中提到的"C#根据cpu序列号、磁盘序列号设计软件注册程序"是一个常见的软件保护技术,用于防止非法复制和盗版。在本文中,我们将深入探讨如何使用C#编程语言来实现这样的注册机制,以及相关的重要知识点。 ...

    C#上位机源代码+自动识别串口

    了解这些核心概念后,你可以深入研究源代码,学习如何在C#中实现串口通信,并结合实际需求进行定制和扩展。此外,这个项目也可以作为一个很好的起点,帮助初学者理解如何在C#中进行设备通信,对物联网(IoT)、自动化...

    C#验证是否安装某个软件

    通过上述内容的学习,我们可以了解到如何使用C#编程语言来检查系统中是否已安装了特定的软件,如Adobe Reader。这种方法虽然简单有效,但也需要注意权限和兼容性等问题。此外,还可以根据具体需求进行扩展,例如判断...

    zhucebiao.rar_zhucebiao_注册表 监视_注册表监视

    源代码可能会使用如C++、C#或Visual Basic等编程语言编写,并且可能涉及到Windows API函数,例如RegQueryValueEx、RegSetValueEx等,用于读写和监控注册表。 在实际应用中,注册表监视可以帮助我们维护系统的稳定性...

    基于C#中Winform开发的看门狗

    在IT行业中,"看门狗"(Watchdog)通常指的是一个监控系统状态并确保关键服务...通过查看这些内容,开发者可以学习到如何结合C#和Winform技术来实现类似看门狗的功能,从而提升自己在系统监控和故障恢复方面的技能。

    C#USBPort.rar

    本项目"**C#USBPort.rar**"显然是一个关于C#语言实现USB端口检测的程序,通过这个程序,我们可以学习到如何在C#环境下进行USB设备的识别、连接和通信。 首先,要理解USB端口检测的基础知识。USB(Universal Serial ...

    《Visual C# .NET精彩编程实例集锦》第4、5章

    在第4章“系统维护”中,读者将学习如何使用C#来实现一系列实用的系统管理工具和功能。这可能包括但不限于以下几个方面: 1. 文件和目录操作:如创建、删除、移动、复制文件和目录,以及进行文件的读写操作。 2. ...

    c# 项目实例 9个经典程序

    9. **添加DOS快速通道右键的简单思路**:这是一个系统级别的项目,可能涉及到注册表操作和上下文菜单扩展,展示了如何通过C#编写外壳扩展程序,增强Windows系统的功能。 这些实例覆盖了C#编程的多个方面,从基本的...

    简单易懂的C#开发源码教程

    学习这部分可以理解如何利用C#创建游戏逻辑、处理用户输入、碰撞检测、动画控制等,让你具备制作2D或3D游戏的基础。 2. **系统操作**:C#提供了丰富的API来执行系统级别的任务,如管理进程、注册表操作、文件系统...

    C#/.NET编写的试用30天代码,注释全可自由更改。

    总结来说,这个代码片段提供了一个C#/.NET实现的试用期管理机制,通过注册表日期检测和系统日期检查来控制软件试用期限,且源代码注释清晰,方便其他开发者进行定制和修改。对于学习C#编程以及软件试用期管理的...

    C# 魔法兔子模块

    在深入探讨这个模块之前,我们首先了解一下C#编程语言,它是Microsoft公司推出的一种面向对象的编程语言,具有现代编程语言的特性,易于学习且高效。 在“系统检测”部分,魔法兔子模块能够检查用户的操作系统状态...

    C#禁止特定程序运行源程序安装包

    总结,创建“C#禁止特定程序运行源程序安装包”涉及C#编程、Windows API调用、进程管理、注册表操作、文件权限控制等多个技术点。通过学习这些知识,开发者不仅可以创建禁止特定程序运行的工具,还能提升对系统级...

    C# 代码段编辑器 EditCode c#绿色编辑器

    通过以上特性,C# 代码段编辑器 EditCode为C#开发者提供了一个实用且高效的辅助工具,尤其适合进行快速原型开发、学习新概念或者测试小规模代码。其便携性和简洁性使其成为开发环境的一个理想补充,特别是在不需要...

    C#winform自动更新程序及DEMO

    在IT行业中,C# WinForm是一种常见的桌面应用程序开发框架,由微软公司开发并提供支持。本文将深入探讨如何使用C# WinForm...通过学习和实践DEMO,开发者不仅可以掌握这一技能,还能深入了解C#编程在实际项目中的应用。

    C#反隐藏技术

    在IT行业中,尤其是在网络安全领域,"C#反隐藏技术"是一个重要的知识点,它涉及到软件开发、恶意软件检测和防御策略。C#是一种广泛使用的面向对象的编程语言,它提供了丰富的库和工具,使得开发安全软件变得更为便捷...

    C#屏幕锁程序

    这通常是在注册表的`HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run`或`HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run`键下添加相应的键值对。程序启动时会读取这些键值,...

Global site tag (gtag.js) - Google Analytics