|
.NET TIPS レジストリの値のデータ型を判別するには?デジタルアドバンテージ2004/02/13 |
![]() |
|
|
|
Windowsレジストリ(以降、レジストリ)の値を取得する方法について、「TIPS:レジストリの値を取得するには?」(以降、前回のTIPS)で解説した。このTIPSのサンプル・プログラムでは、取得するデータを文字列型(Stringクラスのオブジェクト)として取得していたが、実はレジストリ値のデータ型は文字列型だけではない。では、レジストリにはほかにどのようなデータ型が存在するのだろうか。
まずは、前回のTIPSと同様の手順で、レジストリ・エディタを開き、レジストリのデータ型を確認してみよう。
レジストリ・エディタの左側のツリー表示の中からキー「マイ コンピュータ\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework」を選択して、右側のリスト表示の中から[InstallRoot]という値を参照しよう。すると、この値の右側の[種類]の列に「REG_SZ」と表示されているはずだ。これがレジストリ値のデータ型で、「REG_SZ」は文字列型を意味する。次に、[DbgJITDebugLaunchSetting]という値を参照してみよう。すると、この値の[種類]には「REG_DWORD」が表示されているはずだ。これはDWORD型(数値型)を意味する。
![]() |
||||||||||||||||||
| レジストリ・エディタ | ||||||||||||||||||
| Windowsに標準でインストールされている。レジストリ・エディタを起動するには、[スタート]メニューの[ファイル名を指定して実行]をクリックして[ファイル名を指定して実行]ダイアログを起動し、そのダイアログのテキスト・ボックスに「regedit」を入力して実行する。 | ||||||||||||||||||
|
Windowsレジストリのデータ型
このようにレジストリの値にはデータ型がいくつか存在する。このデータ型の種類についてまとめておこう。
レジストリのデータ型には、レジストリ特有の呼び方がある。例えば、文字列は「REG_SZ」と呼ばれ、.NET Frameworkの「Stringクラス(System名前空間)」に対応する。この「REG_SZ」の定義は「nullで終わるUnicode文字列値」である。そのほかの主なデータ型について、レジストリでの呼ばれ方、.NET Frameworkでの対応するデータ型、データ型の説明を以下の表にまとめた。なお、これですべてのデータ型ではないが、プログラムで使用する分においてはほとんどの場合で十分だろう。
| データ型 | レジストリ | .NET Framework | 説明 |
| 文字列値 | REG_SZ | System.String | nullで終わる Unicode文字列値 |
| DWORD値(数値) | REG_DWORD | System.Int32 | 4Bytes(32Bit)長の数値。数値の範囲は「0(0x00000000)」〜「4294967295(0xffffffff)」 |
| バイナリ値 | REG_BINARY | System.Byte[] | 未加工のバイナリ・データ |
| 複数行文字列値 | REG_MULTI_SZ | System.String[] | nullで終わる Unicode文字列の配列 |
| 展開可能な文字列値 | REG_EXPAND_SZ | System.String | 環境変数(例えば「%USERNAME%」や「%SystemRoot%」など)を含むnullで終わるUnicode文字列 |
| レジストリのデータ型の一覧表 | |||
注意が必要なのは、REG_EXPAND_SZである。このデータ型は.NET FrameworkではStringクラス(System名前空間)に対応付けられている。しかし、REG_SZでも同様にStringクラスに対応付けられているため、両者の区別がつかない。よって、.NET FrameworkプログラムでStringクラスのオブジェクトを取得した場合は、環境変数を含むREG_EXPAND_SZの可能性があることを考慮にいれておかなければならない。
実際に環境変数(例えば、「%SystemRoot%」など)を含んでいる場合は、その環境変数を「C:\Windows」などの本来の文字列に展開する必要がある。環境変数の展開を行うには、Environmentクラス(System名前空間)のExpandEnvironmentVariablesメソッドを呼び出せばよい。しかし、筆者が試した環境では、REG_EXPAND_SZの値を取得した段階ですでに環境変数が文字列に展開されて取得されて、展開を行う必要はなかった。
なお、これらのデータ型の中でもっとも使われるのはREG_SZ値で、その次がREG_DWORD値である。それ以外のデータ型はほとんど使われることがないだろう。
レジストリ値のデータ型の判別
それでは、これらのレジストリ値のデータ型を.NETプログラムで判別する手順を解説しよう。
レジストリ値のデータ型の判別は難しくない。まずは、前回の「TIPS:レジストリの値を取得するには?」のサンプル・プログラムと同じように、レジストリの値をする。このとき、前回はStringクラスに型変換してレジストリの値のオブジェクトを取得したが、今回はObjectクラスのオブジェクトのまま取得する。次に、そのオブジェクトのGetTypeメソッドを呼び出す。これだけでレジストリの値のデータ型を取得できる。この「.NET Frameworkのデータ型」を先ほどの「レジストリのデータ型の一覧表」に照らし合わせて、実際の「レジストリのデータ型」を判別すればよい。では、このデータ型の取得を行うプログラムの一連の流れを説明しよう。
まず、レジストリ・キーを開くために、RegistryKeyクラス(Microsoft.Win32名前空間)のOpenSubKeyメソッドを呼び出す。OpenSubKeyメソッドを呼び出すと、その戻り値としてRegistryクラス(Microsoft.Win32名前空間)のオブジェクトを取得できる。このオブジェクトのGetValueメソッドを呼び出し、その値のデータをObjectクラスのオブジェクトのまま取得する(前回のTIPSではStringクラスのオブジェクトとして取得した)。このオブジェクトのGetTypeメソッドを呼び出すと、そのオブジェクトの.NET Frameworkでのデータ型を取得できる。最後に、先ほど開いたレジストリ・キーを閉じるため、RegistryオブジェクトのCloseメソッドを呼び出す。
この処理の実際のコードを以下に示す。
|
|
| レジストリから値のデータを取得するプログラム | |
| サンプル・プログラム(C#:regtypet.cs、VB.NET:regtype.vb)のダウンロード |
上記のプログラムでは、ToStringメソッドを使って取得した値のデータ型を文字列化してコンソールに出力している。
なお、上記のコードのRegistryKeyクラスのGetValueメソッドでは、第2パラメータを指定すると、値のデータが存在しないときにそのパラメータに指定したデータを戻り値として取得できる。なお、このパラメータは、「TIPS:レジストリの値を取得するには?」のサンプル・プログラムのように、指定せずにメソッドを呼び出すこともできる。![]()
| カテゴリ:クラス・ライブラリ 処理対象:レジストリ 使用ライブラリ:RegistryKeyクラス(Microsoft.Win32名前空間) 使用ライブラリ:Registryクラス(Microsoft.Win32名前空間) 使用ライブラリ:Objectクラス(System名前空間) 関連TIPS:レジストリの値を取得するには? |
|
||||||||||||||||||||||||||||
| 「.NET TIPS」 |
TechTargetジャパン
- データ・コレクションをバインドするには? (2013/5/16)
Windowsストア・アプリやWindows Phone 8アプリで、データのコレクションをコントロールにバインドする方法を解説する - コントロール同士をデータ・バインドするには? (2013/5/9)
データ・バインドの仕組みを使うと、データ・クラスだけでなく、コントロール同士もバインドできる。その方法を説明する - 自動ビルドを実現するビルド・サービス環境の構築 (2013/5/8)
ソース・コードの管理環境の構築の次は、自動ビルド環境を構成しよう。Team Foundation Server Expressの機能を活用して簡単に構築 - ライブラリとしてのWindowsランタイム (2013/4/26)
WinRTは「Windowsストア・アプリのためだけの実行環境とライブラリ」ではない?! デスクトップ・アプリからWinRTを使う方法を解説する
|
|
- PostgreSQLエンタープライズ利用の指針が続々公開
- Play 2.xのScala Templatesでビュー&フォーム操作
- データサイエンティストの本当の役割とは?
- 第365話 盛るヒトビト
- 知らないと現場で困るバージョン管理システムの基礎
- Win 7/8のインストールUSBメモリをdiskpartで作る
- どうする、オープンデータ。
- Hud美さんと学ぶRedmine×Jenkinsの神アジャイル
- Server 2012でサーバの初期設定作業を行う
- アドビの本気度が詰まったAdobe Maxまとめ
- DB・要件定義が通じない? 顧客の知識レベルを探る
- 「初音ミク」や「ゆるキャラ」の商標権ってどうなの?
キャリアアップ
- - PR -
イベントカレンダー
- - PR -
転職/派遣情報を探す
**先週の人気講座ランキング**
〜 Android編 〜
ホワイトペーパー(TechTargetジャパン)
「ITmedia マーケティング」新着記事
ソーシャルメディア対応CRMと従来型CRM、3つの違いとは?
現在中小企業のビジネスコミュニティの中で、「最新型のソーシャルCRM対従来型CRMのどち...
OWASYS、Twitter管理クラウドサービス「ツイ助。」に、つぶやきクリック数を解析する新機能を追加
OWASYSは5月20日、同社が開発/運営するTwitter管理クラウドサービス「ツイ助。」に、つ...
CyberZ、スマホ広告効果測定ツール「Force Operation X」、世界250カ国対応のグローバルワンSDK提供開始
サイバーエージェントの連結子会社であるCyberZは5月16日、スマートフォン広告向けソリュ...



