.NET TIPS

レジストリのキーを列挙するには?[C#、VB]

デジタルアドバンテージ 一色 政彦
2007/09/06

 Windowsレジストリ(以降、レジストリ)は、アプリケーションの構成/設定情報などを格納するためのWindows特有のデータベースである。レジストリは、Windowsシステムのフォルダに似た構造を持っており、レジストリ・キー(以降、キー)と呼ばれるディレクトリ階層の中にレジストリ値を格納する。Windowsシステムになぞらえると、レジストリのキーはフォルダに、レジストリ値はファイルに相当する。

TIPS:レジストリの値を取得するには?
TIPS:レジストリの値を設定するには?

 本稿では、このうちのキーを列挙する方法を紹介する。このようなキーの列挙は、キーの有無を確認して階層構造を調べながら、レジストリの内容を(固定ではなく)動的に取得する際に役立つ。

サブ・キーを列挙する方法

 キーを列挙するには、RegistryKeyクラス(Microsoft.Win32名前空間)が持つGetSubKeyNamesメソッド(パラメータなし)を利用すればよい。ただし、このメソッドを呼び出すには、RegistryKeyクラスのオブジェクトが必要である。

 RegistryKeyオブジェクトを取得するは、まず、Registryクラス(Microsoft.Win32名前空間)の静的フィールドであるLocalMachineフィールドやCurrentUserフィールドを利用して適切な基本RegistryKeyオブジェクトを作成する。

 次に、この基本RegistryKeyオブジェクトが持つOpenSubKeyメソッドを、開きたいレジストリのキーのパス名をパラメータに指定して呼び出す(この際のパス名は「HKEY_LOCAL_MACHINE」などのルート名を省略して「SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths」のようにする必要がある)。これにより、開きたいキーに対応したRegistryKeyオブジェクトが取得できる。

 このようにして取得したRegistryKeyオブジェクトが、列挙しようとしているキーの親キーとなる。あとは、親キーのRegistryKeyオブジェクトが持つGetSubKeyNamesメソッドを呼び出すと、その親キーの配下にあるすべてのサブ・キー(=子キー)の名前が、文字列配列型の戻り値として取得できるというわけだ。

 以上の処理を実装したコード例を次に示す。

using System;
using Microsoft.Win32;

class Program
{
  static void Main(string[] args)
  {
    string baseKeyName =
      @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\";

    // すべてのサブ・キー名を取得する
    RegistryKey rParentKey =
      Registry.LocalMachine.OpenSubKey(baseKeyName);

    string[] arySubKeyNames = rParentKey.GetSubKeyNames();

    rParentKey.Close();

    foreach (string subKeyName in arySubKeyNames)
    {
      Console.WriteLine(subKeyName);
      // 出力例:
      // AcroRd32.exe
      // atltracetool.exe
      // ……以下略

    }
  }
}
Imports Microsoft.Win32

Module Module1

  Sub Main()
    Dim baseKeyName As String = _
"      SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\"

    ' すべてのサブ・キー名を取得する
    Dim rParentKey As RegistryKey = _
      Registry.LocalMachine.OpenSubKey(baseKeyName)

    Dim arySubKeyNames As String() = _
      rParentKey.GetSubKeyNames()

    rParentKey.Close()

    For Each subKeyName As String In arySubKeyNames
      Console.WriteLine(subKeyName)
      ' 出力例:
      ' AcroRd32.exe
      ' atltracetool.exe
      ' ……以下略

    Next

  End Sub

End Module
サブ・キーを列挙するコンソール・アプリケーションのサンプル・プログラム(上:C#、下:VB)

 開いたキーを閉じるため、RegistryKeyオブジェクトのCloseメソッドを呼び出すことを忘れないようにしてほしい。End of Article

カテゴリ:クラス・ライブラリ 処理対象:レジストリ
使用ライブラリ:Registryクラス(Microsoft.Win32名前空間)
使用ライブラリ:RegistryKeyクラス(Microsoft.Win32名前空間)
関連TIPS:レジストリの値を取得するには?
関連TIPS:レジストリの値を設定するには?

この記事と関連性の高い別の.NET TIPS
リモート・コンピュータのレジストリを参照/操作するには?
レジストリの値を列挙するには?
レジストリの値を取得するには?
レジストリの値を設定するには?
レジストリの値のデータ型を判別するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH