レジストリ情報をC#で読み込む



レジストリはウィンドウシステムの核心的なデータベースであり、このデータベースにはシステムに関連する各種パラメータが格納され、これらのパラメータは直接制御中のシステムの起動、ハードウェアのドライバインストール情報、ウィンドウシステム上で実行される各種アプリケーションのノート情報などである.これは、レジストリが何らかの理由で破壊された場合、軽いものはウィンドウシステムの起動過程に異常が発生し、重いものはシステム全体の完全な麻痺を引き起こす可能性があることを意味します.そのため、レジストリを正しく認識し、タイムリーにレジストリをバックアップすることは、ウィンドウユーザーにとって非常に重要です.C#は、レジストリを操作するプログラムを簡単かつ簡潔に開発することができます.「開始/実行」をクリックし、「開く」の後ろに「regedit」を入力します.レジストリのデータ構造が表示されます.プライマリ・キーには階層があります.プライマリ・キーの次のレベルのプライマリ・キーは、そのプライマリ・キーの「サブキー」と呼ばれます.各プライマリ・キーは、複数のサブキーを持つことができます.右のこれらの値はいわゆるキー値です.各プライマリ・キーまたはサブキーは、複数のキー値を持つことができます.レジストリは膨大なデータベースであり、各プライマリ・キーには、各キー値に異なる機能が付与されています.C#レジストリのプライマリ・キーとキーの値を読み込む方法:はい.Net FrameWork SDK Beta 2版には、Microsoftがあります.Win 32の名前空間.この名前空間にはレジストリ操作用の2つのクラス:Registryクラス、RegistryKeyクラスが用意されている.この2つのクラスはすべて閉じたクラスで、継承できません.この2つのクラスは、レジストリに関する多くのメソッドとプロパティを定義しています.この2つのクラスを呼び出すことで、Visual C#でレジストリに関するさまざまな操作を簡単に処理できます.  (1).Registryクラス:このクラスは主に7つの共通の静的ドメインをカプセル化しています.これらの静的ドメインは、このウィンドウレジストリの7つの基本的なプライマリ・キーを表しています.具体的には、次のようになります.
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クラスで次のサブキーを探して具体的な操作を処理します.次に、レジストリ情報を読み出す例を用いて、これら2つの使い方を具体的に説明する.プログラムの设计と运行の环境:Windows 2000サーバー版,.Net FrameWork SDK Beta 2版.プログラムを実行する前に必要な処理作業.プログラム設計時、主な機能は既存のプライマリ・キー値を読み取ることであり、ユーザーはいくつかのプライマリ・キーと対応するキー値を新規作成することができる.プログラムの主な機能は、指定したプライマリ・キーの下にあるすべてのサブキーとサブキーが持つキー値を読み出し、リスト形式で階層別に表示することです.プログラム設計の重要なステップと注意すべき問題点:プログラムでプライマリ・キー、サブキー、キー値を読み込む方法:プログラムで指定したプライマリ・キーの下にあるサブキーとサブキーにあるキー値を読み取るために、主にRegistryKeyクラスの4つの方法:OpenSubKey、GetSubKeyNames、GetValue、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" ) ;      

ここでlistBox 1は、プログラムで定義されたリスト名である.
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である.Win 32の2つのクラスが実現される.この2つのクラスでは、レジストリ情報の削除、変更、名前変更の方法も定義されています.これらの方法は,本稿で紹介した読み出し方法,開く方法よりも破壊的であるが,より実用的である.レジストリはウィンドウシステムにおいて重要な役割を果たすため、レジストリを操作するたびに必ずバックアップし、操作するときも注意しなければならない.一度の誤操作でシステムがクラッシュする可能性があるからだ.