- 浏览: 18446 次
最新评论
编写reg文件
2010年06月18日
编写.reg文件 导入注册表 REG注册表文件编写攻略
Windows 中的注册表文件( system.dat 和 user.dat )是 Windows 的核心数据库,因此,对 Windows 来说是非常重要的。通过修改注册表文件中的数据,可以达到优化 Windows 性能的效果。但修改注册表也可能导致整个 Windows 系统的崩溃!所以,在对注册表进行操作前或者是在安装一些软件前先对注册表进行备份。
下面介绍REG 文件的编写方法。
一、对主键的操作
1.新建一个主键
例如我们想在主键 HKEY_CURRENT_USER\Software 下新建一个名叫"我的软件"的主键。那么,你可以打开记事本,写入如下内容:
说明:
(1) 第一行的 REGEDIT4 必须用大写。第二行必须为一个空行。在最后必须要有一个回车。
(2) Windows 95/98/ME/NT4.0等的REG文件开头第一行是"REGEDIT4"。而Windows 2000/XP则是"Windows Registry Editor Version 5.00",用以区分所使用的操作系统。事实上,"REGEDIT4"适合目前任何Windows 操作系统(9X/2000/XP/2003)。
然后将这个文件保存成为 REG 格式。例如, reg.reg
双击运行此文件,会弹出两次确认信息,确定后计算机就会把我们写的注册表项目写入注册表文件中。你可以打开 Regedit.exe 来检查一下。
2.删除一个主键
例如我们想把刚才我们建的那个名叫"我的软件"的主键删除掉,那么我们可以在记事本中这么写:
注意到前面的减号" - "了吧,这就是删除的意思。将它保存成 reg 格式,运行。"我的软件"这个主键就被删掉了。
二、对键值项的操作
1.添加一个键值项
要新建一个键值项,必须要指明该键值所在的分支,该键值的名字、该键值的类型和该键值的值 ( 数据 ) 。例如要在分支 HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\Explorer 下新建一个名为" Nodrives ",类型为" Dword " ,值为" 00000004 "的键值项。你可以这么写:
说明:
(1) 键值类型 dword 必须用小写 ,其他类型如 hex 等也都必须用小写;
(2) 在新建键值项时,如果该键值所在的主键分支不存在,在添加新键值的同时系统会自动创建该分支;
(3) 在创建字符串类型的键值时,如果该字符串中包含路径分隔符,这个路径分隔符应该用双斜杠" \\ "表示。例如:
关于键值类型,除了 WindowsXP 外,其他的 Windows 版本中都只有三种: Dword 值、二进制值和字符串值。在 REG 文件中, Dword 值用 dword 表示,二进制值用 hex 表示,字符串值直接用引号把内容括起来就行。至于在 WindowsXP 中,除了这三种外又增加了两种:多字符串值和可扩充字符串值。
在 REG 文件中,默认键值是用 @ 表示的,并且没有引号。
2、删除一个键值项目
例如我们要删除刚才创建的" Nodrives "键值,我们可以这么写:
注意到等号后面的减号了吧,这就是删除的意思。
3、修改键值项的值
例如我们想将前面创建的" Nodrives "键值项的值由原来的 00000004 改为 0000000c ,那么我们可以这么写:
这和创建一个新键值的方法是类似的,计算机会自动用 0000000c 将 00000004 替换掉。
以上都是一次执行一个操作,如果你想一次执行"一批"操作呢?很简单,只要把你要操作的项目一条一条的写入 REG 文件里就行了。如果是对同一个主键下的键值进行操作,你只要写一次键值所在的分支就可以,因为他们的分支都一样。例如:
在c#操作注册表:
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主键
RegistryKey类封装了对注册表的基本操作,包括读取,写入,删除。其中读取的主要函数有:
OpenSubKey ( string name )方法主要是打开指定的子键。
GetSubKeyNames ( )方法是获得主键下面的所有子键的名称,它的返回值是一个字符串数组。
GetValueNames ( )方法是获得当前子键中的所有的键名称,它的返回值也是一个字符串数组。
GetValue ( string name )方法是指定键的键值。
写入的函数有:
CreateSubKey(string name)方法是增加一个子键
SetValue(string name,string value)方法是设置一个键的键值
删除的函数:
DeleteSubKey ( )方法:删除一个指定的子键。
DeleteSubKeyTree ( )方法:
此方法是彻底删除指定的子键目录,即:删除该子键以及该子键以下的全部子键。
1.IE窗口的动感效果
//-------------------------------------
// ChangeIE.cs ? 2004 by yudehui
//-------------------------------------
using System;
using Microsoft.Win32; //对注册表操作一定要引用这个命名空间
namespace ChangeIE
{
class ChangeIE
{
[STAThread]
static void Main(string[] args)
{
RegistryKey pregkey ;
pregkey = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop\\WindowMetrics",true);
if (pregkey==null)
{
Console.WriteLine("键值不存在");
}
else
{
pregkey.SetValue("MinAnimate","1");
pregkey.SetValue("MaxAnimate","1");
Console.WriteLine("修改成功");
}
pregkey. Close;
}
}
}
2.改变IE工具栏的背景
//-------------------------------------
// ChangeIE.cs ? 2004 by yudehui
//-------------------------------------
using System;
using Microsoft.Win32; //对注册表操作一定要引用这个命名空间
namespace ChangeIEbackColor
{
class ChangeIEbackColor
{
[STAThread]
static void Main(string[] args)
{
RegistryKey pregkey ;
pregkey = Registry.CurrentUser.OpenSubKey("Software\\Microso ft\\Internet" +
"Explorer\\Toolbar\\Explorer ",true);
if (pregkey==null)
{
Console.WriteLine("键值不存在");
}
else
{
pregkey.SetValue("BackBitmap","C:\\windows\\Greens tone.bmp");
Console.WriteLine("修改成功");
}
pregkey.Close;
}
}
}
以下从'读''写''删除''判断'四个事例实现对注册表的简单操作
1.读取指定名称的注册表的值
private string GetRegistData(string name)
{
string registData;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.OpenSubKey("XXX",true);
registData = aimdir.GetValue(name).ToString();
return registData;
}
以上是读取的注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下的XXX目录中名称为name的注册表值;
2.向注册表中写数据
private void WTRegedit(string name,string tovalue)
{
RegistryKey hklm = Registry.LocalMachine;
RegistryKey software = hklm.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.CreateSubKey("XXX");
aimdir.SetValue(name,tovalue);
}
以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下新建XXX目录并在此目录下创建名称为name值为tovalue的注册表项;
3.删除注册表中指定的注册表项
private void DeleteRegist(string name)
{
string[] aimnames;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.OpenSubKey("XXX",true);
aimnames = aimdir.GetSubKeyNames();
foreach(string aimKey in aimnames)
{
if(aimKey == name)
aimdir.DeleteSubKeyTree(name);
}
}
以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下XXX目录中删除名称为name注册表项;
4.判断指定注册表项是否存在
private bool IsRegeditExit(string name)
{
bool _exit = false;
string[] subkeyNames;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.OpenSubKey("XXX",true);
subkeyNames = aimdir.GetSubKeyNames();
foreach(string keyName in subkeyNames)
{
if(keyName == name)
{
_exit = true;
return _exit;
}
}
return _exit;
}
以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下XXX目录中判断名称为name注册表项是否存
在,这一方法在删除注册表时已经存在,在新建一注册表项时也应有相应判断; 注册表是视窗系统的一个核心的数据库,在这个数据库中存放中与系统相关的各种参数,这些参数直接控制中系统的启动、硬件的驱动程序安装信息以及在视窗系统上运行的各种应用程序的注册信息等。这就意味着,如果注册表因为某些原因受到了破坏,轻者是视窗系统启动过程出现异常,重者就有可能导致整个系统的完全瘫痪。所以正确的认识注册表,及时的备份注册表,对于视窗用户就显得相当重要。
C#就可以十分方便、简洁的开发出操作注册表的程序。单击"开始/运行",在"打开"的后面填入"regedit"。就可以看到注册表的数据结构了。"主键"是有层次结构的。主键的下一级主键称为该主键的"子键"。每一个主键可以对拥有多个子键。右边的这些值就是所谓的键值了。每一个主键或者子键都可以拥有多个键值。注册表是一个庞大的数据库,在其中每一个主键,每一个键值都赋予了不同的功能。
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类,来找其下面的子键和处理具体的操作的。
下面通过一个读取注册表信息例子来具体说明这二个来的用法。
程序设计和运行的环境:Windows 2000服务器版,.Net FrameWork SDK Beta 2版。
在运行程序前的一些必要的处理工作。在程序设计时,主要功能是读取已经存在的主键键值,用户可以新建若干个主键和对应的键值。
程序的主要功能是读取指定主键下面的所有子键和子键拥有的键值,并以列表的形式按层次显示出来。程序设计过程中的重要步骤以及应该注意的一些问题:
程序中读取主键、子键和键值所使用到的方法: 程序中为了读取指定主键下面的子键和子键中拥有的键值,主要使用了RegistryKey类中的四个方法:OpenSubKey,GetSubKeyNames,GetValueNames,GetValue。具体的用法和意思如下: OpenSubKey ( string name )方法主要是打开指定的子键。 GetSubKeyNames ( )方法是获得主键下面的所有子键的名称,它的返回值是一个字符串数组。 GetValueNames ( )方法是获得当前子键中的所有的键名称,它的返回值也是一个字符串数组。 GetValue ( string name )方法是指定键的键值。
程序中具体的使用语句如下: RegistryKey hklm = Registry.LocalMachine ; //打开"SYSTEM"子键 RegistryKey software = hklm.OpenSubKey ( "SYSTEM" ) ; //打开"001"子键 RegistryKey no1 = software.OpenSubKey ( "001" ) ; //打开"002"子键 RegistryKey no2 = no1.OpenSubKey ( "002" ) ;
其中listBox1是程序中定义了的列表名称。 foreach ( string site in no2.GetSubKeyNames ( ) ) //开始遍历由子键名称组成的字符串数组 { listBox1.Items.Add ( site ) ; //在列表中加入子键名称 RegistryKey sitekey = no2.OpenSubKey ( site ) ; //打开此子键 foreach ( string sValName in sitekey.GetValueNames ( ) ) //开始遍历由指定子键拥有的键值名称组成的字符串数组 { listBox1.Items.Add ( "" + sValName + ": " + sitekey.GetValue ( sValName ) ) ; //在列表中加入键名称和对应的键值 } }
通过以上的论述,我们可以得到程序的源程序代码,具体如下: 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 ; 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 ( 75 , 23 ) ; button1.TabIndex = 0 ; button1.Text = "读取注册表" ; button1.Click += new System.EventHandler( this.button1_Click ) ; listBox1.Location = new System.Drawing.Point ( 16 , 32 ) ; listBox1.Size = new System.Drawing.Size ( 496 , 264 ) ; listBox1.TabIndex = 1 ; this.Text = "读取主测表信息" ; 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 ) ; } // protected void button1_Click ( object sender , System.EventArgs e ) { listBox1.Items.Clear ( ) ; RegistryKey hklm = Registry.LocalMachine ; RegistryKey software = hklm.OpenSubKey ( "SYSTEM" ) ; //打开"SYSTEM"子键 RegistryKey no1 = software.OpenSubKey ( "001" ) ; //打开"001"子键 RegistryKey no2 = no1.OpenSubKey ( "002" ) ; //打开"002"子键 foreach ( string site in no2.GetSubKeyNames ( ) ) //开始遍历由子键名称组成的字符串数组 { listBox1.Items.Add ( site ) ; //在列表中加入子键名称 RegistryKey sitekey = no2.OpenSubKey ( site ) ; //打开此子键 foreach ( string sValName in sitekey.GetValueNames ( ) ) //开始遍历由指定子键拥有的键值名称组成的字符串数组 { listBox1.Items.Add ( "" + sValName + ": " + sitekey.GetValue ( sValName ) ) ; //在列表中加入键名称和对应的键值 } } } // public static void Main ( ) { Application.Run ( new Form1 ( ) ) ; } }
用C#读取注册表中的注册信息是通过名称空间Micorsoft.Win32中的二个类来实现的。在这二个类中还定义了对注册表信息的删除、修改和重命名的一些方法。这些方法比起本文介绍的读取方法、打开方法来说,更具有破坏性,但也更实用。由于注册表在视窗系统中的重要作用,所以在每一次对注册表进行操作之前,一定要备份,在操作的时候也要非常小心,因为一次的误操作都可能导致系统崩溃。
发表评论
-
SPS技术体系分析(张永康)
2012-01-20 01:55 956SPS技术体系分析(张永康) 2010年07月18日 一 ... -
shell定制相关资料
2012-01-20 01:55 1364shell定制相关资料 2011 ... -
RAPI(转)
2012-01-20 01:55 822RAPI(转) 2011年06月09日 ● 引言 ... -
Qt For Wince平台的搭建【vs2008 】
2012-01-20 01:55 2067Qt For Wince平台的搭建【vs2008 】 201 ... -
《萌芽―――恶童》
2012-01-19 09:42 677《萌芽―――恶童》 2011年12月31日 我和袁治站在 ... -
试析那一次雨点式的批评(转)
2012-01-19 09:42 639试析那一次雨点式的批 ... -
段老师的教育思考之二十七: 如何过一个有意义的寒假
2012-01-19 09:41 600段老师的教育思考之二 ... -
咱儿子(二)
2012-01-19 09:41 624咱儿子(二) 2012年01月14 ... -
Android服务器的SDK、NDK升级
2012-01-17 02:17 2675Android服务器的SDK、NDK升级 2011年02月2 ... -
Windows SDK笔记(一):Windows程序基本结构
2012-01-17 02:17 595Windows SDK笔记(一):Windows ... -
SDK详解
2012-01-17 02:16 653SDK详解 2010年11月01日 sdk SDK( ... -
sdk
2012-01-17 02:16 701sdk 2011年05月19日 SD ... -
SDK, API 和 MFC 的区别
2012-01-17 02:16 1936SDK, API 和 MFC 的区别 201 ... -
socket “套接字”学习(2)
2012-01-15 21:54 840socket “套接字”学习(2) 2009年09月09日 ... -
关于手机开发socket笔记。
2012-01-15 21:54 610关于手机开发socket笔记。 2009年11月06日 ... -
提高 Linux 上 socket 性能
2012-01-15 21:54 526提高 Linux 上 socket 性能 ... -
【转】java socket程序
2012-01-15 21:54 692【转】java socket程序 200 ... -
Java-socket编程最基本介绍
2012-01-15 21:54 584Java-socket编程最基本介 ...
相关推荐
REG注册表文件编写全攻略REG注册表文件编写全攻略REG注册表文件编写全攻略
简明批处理教程22009年10月20日 星期二 下午 05:35 最近对于批处理技术的探讨比较热,也有不少好的批处理程序发布,但是如果没有一定的相关知识恐怕不容易看懂和理解这些批处理文件,也就更谈不上自己动手编写了,古...
REG注册表文件编写全攻略,Windows 中的注册表文件( system.dat 和 user.dat )是 Windows 的核心数据库,因此,对 Windows 来说是非常重要的。通过修改注册表文件中的数据,可以达到优化 Windows 性能的效果。
批量修改txt文件属性.前缀.后缀名 批量修改reg文件
本程序主要用C++语言编写实现了文件默认打开方式的功能,通过修改注册表项来实现。
用vb编写的判断未知文件类型的软件。可以用于恢复数据,如硬盘扫描生成的*.chk文件。可以用于识别google浏览器临时文件夹下的没有文件后缀名的文件,还可以用于更正某些网站为了不让大家看的cgi文件等类型,以恢复...
将.reg文件插入到脱机配置单元中,或从头开始创建一个新文件。 初赛 Windows有两种主要的文件格式:注册文件( .reg )和配置单元文件( .dat或无扩展名)。 Windows API仅加载后一种文件类型,并直接使用它们。 ...
FPGA 读写i2c_eeprom_Verilog逻辑源码Quartus工程文件+文档说明,EEPROM 型号24LC04,,FPGA型号Cyclone4E系列中的EP4CE6F17C8,Quartus版本17.1。 module i2c_eeprom_test( input clk, input rst_n, input key1, ...
本文档介绍编写一个reg文件,在C#通过调用reg文件,进行在程序内部提示用户需要的权限
reg.reg 运行前需导入的注册表文件(如果有的话) Program32.exe 32位版本的应用程序 Program64.exe 64位版本的应用程序 其他文件 (如果存在其他文件的话) 将上述文件用自解压工具打包压缩成EXE,设置解压到...
编写逻辑使数码管从0~9循环计数,时间间隔为1秒。 module remote_rcv ( //input input sys_clk , //系统时钟 input sys_rst_n , //系统复位信号,低电平有效 input remote_in , //红外接收信号 //output output...
3) servlet程序reg.java:将所有注册信息保存到注册数据库register中,然后转去执行registerSuccess.html文件。 3)registerSuccess.html文件:显示注册成功信息。 根据以上要求,使用sql或Mysql或access建立数据库,...
WSHShell.RegWrite "HKCR\CLSID\{00000000-0000-0000-0000-000000000012}\Instance\InitPropertyBag\command", "显示系统文件+扩展名", "REG_SZ" WSHShell.SendKeys "{F5}+{F10}e" 'WSHShell.Popup "Poof, they're ...
本文实例讲述了php实现的zip文件内容比较类。是一个非常实用的PHP类文件。分享给大家供大家参考。 该php zip文件比较类主要实现比较两个zip文件的...这样可以节省资源与时间,因此需要编写一个能够比较zip内文件的类。
本实验与ARM基本无关,可以理解为在IDE环境下,编写标准的C程序。 学会使用Embest IDE编写简单的C语言程序并进行调试...使用命令脚本文件。 通过mem/reg/watch/variable/disasm分析判断结果。 建议稍微增加程序内容。
此工程是串转并行数据的实验 do文件模板(自动仿真文件) Modelsim do 文件的自动化仿真 1.1 建立库 1.2 映射库到物理目录 1.3 编译源文件 1.4 启动仿真器 1.5 执行仿真 ...vlog -work work ./tb_ex_shift_reg
用60行代码编写的简单CPU模型 CPU60是用60行C...如何建造建立: make怎么跑手动: % ./cpu60reg0=a7 reg1=f1 reg2=d9 reg3=2a reg4=82 reg5=c8 reg6=d8 reg7=fesub r0,r0,r0reg0=00 reg1=f1 reg2=d9 reg3=2a reg4=82
需要调用我编写的 sn.dll 文件 如果你使用VB,请在 <工程>-<引用(N)...> 下添加 sn.dll 文件,调用代码格式: Dim ret As New sn Call ret.mysn(IDCode, sn, Sourcecode) 如果直接运行 testSN.exe ,请先将 sn.dll ...
文件针对win10系统编写的一个简易的清理内存的小程序,双击运行即可,可以解决电脑未知情况下高内存运行情况。
此外,如果找到任何注册表值,其中包含带有某些文件扩展名的文件路径并且它们是可写的,则也会报告这些值。 有关此工具及其使用的更多信息,请参见相关的github.io文章: 帮助输出: ++++++++++++++Reg1c1de++++++...