|
.NET TIPS レジストリの値を設定するには?デジタルアドバンテージ2004/02/20 |
![]() |
|
|
|
Windowsレジストリ(以降、レジストリ)は、アプリケーションの構成/設定情報などを格納するためのWindows特有のデータベースである。レジストリ値を取得する方法については「TIPS:レジストリの値を取得するには?」で解説している。本稿では、レジストリ値を設定する方法を紹介する。
「TIPS:レジストリの値を取得するには?」で解説したように、レジストリの値を取得するにはRegistryKeyクラス(Microsoft.Win32名前空間)のGetValueメソッドを呼び出す。一方、レジストリの値の設定では、このメソッドの代わりにRegistryKeyクラスのSetValueメソッドを呼び出す。値の取得がGetValueメソッドで、値の設定がSetValueメソッドである。
しかし、レジストリの値の設定はGetValueメソッドをSetValueメソッドに置き換えただけでは動作しない。なぜなら、SetValueメソッドを呼び出すために事前にRegistryKeyクラスのOpenSubkeyメソッドを使ってレジストリ・キーを開くと、そのレジストリ・キーが読み取り専用で開かれてしまうからだ。SetValueメソッドを使うには、レジストリ・キーを書き込み可能な状態で開かなければならない。
これを行うには、OpenSubkeyメソッドの第2パラメータ(書き込みアクセス許可)にtrueを指定するか、もしくはRegistryKeyクラスのCreateSubkeyメソッドを使用する。この2つのメソッドの違いは、OpenSubkeyメソッドは既存のキーを開くだけなのに対し、CreateSubkeyメソッドはキーが存在しない場合は新たにキーを作成してから開くことだ。もしキーが確実に存在するかどうか分からない場合は、CreateKeyメソッドでレジストリ・キーを開く方がよいだろう。
レジストリの値を取得する手順は次のようになる。まずレジストリ・キーを開くために、RegistryKeyクラスのCreateSubkeyメソッドを呼び出す。このメソッドを呼び出すには、RegistryKeyクラスのオブジェクトが必要なので、Registryクラスの静的フィールドであるLocalMachineオブジェクトやCurrentUserオブジェクトを利用する。なお前述したように、レジストリ・キーが既存ならば、CreateSubkeyメソッドの代わりにOpenSubKeyメソッドを書き込み可能モードで呼び出してもよい。
CreateSubkeyメソッド(またはOpenSubKeyメソッド)はRegistryクラスのオブジェクトをその戻り値として返すので、次にそのオブジェクトのSetValueメソッドを呼び出す。これにより、その値のデータを設定できる。このSetValueメソッドは、設定したいレジストリ値の「名前(第1パラメータ)」と「データ(第2パラメータ)」を指定して呼び出す必要がある。
最後に、先ほど開いたレジストリ・キーを閉じるため、RegistryオブジェクトのCloseメソッドを呼び出す。
以上の処理を記述した実際のコード例を次に示す。
|
|
| レジストリから値のデータを設定するサンプル・プログラム | |
RegistryKeyクラスのSetValueメソッドについてもう少し詳しく解説しておこう。
SetValueメソッドに指定するパラメータは、「名前(第1パラメータ)」と「データ(第2パラメータ)」の2つである。この第2パラメータに設定可能なデータの「データ型」には、REG_SZ型/REG_DWORD型/REG_BINARY型/REG_MULTI_SZ型の4つがある。もしREG_SZ型を設定したい場合には、SetValueメソッドの第2パラメータ(レジストリ値の「データ」)に、System.String型のオブジェクトを指定する。これは上記のプログラムのとおりだ。ほかのデータ型でも同様に、REG_DWORD型ならSystem.Int32型、REG_DWORD型ならSystem.Byte[]型、REG_MULTI_SZ型ならString[]型のオブジェクトを指定する。なお、これらのレジストリのデータ型と.NET Frameworkのデータ型の組み合わせについては「レジストリの値のデータ型を判別するには?」の表で解説しているので、詳しくはそちらを参照してほしい。
またレジストリの値には、レジストリ・キーごとに1つだけ割り当てられるデフォルト値が存在する。通常これはレジストリ・エディタでは「(既定値)」と表示される。このデフォルト値を設定するには、SetValueメソッドの第1パラメータであるレジストリ値の「名前」に空文字(「""」)を指定すればよい。なおこの第1パラメータには「null」を指定することも可能だが、レジストリ値を削除するRegistryKeyクラスのDeleteValueメソッドでレジストリ値の名前に「null」を指定するとエラーになってしまうため、「null」ではなく空文字「""」を使うことをお勧めする。
なお、ここでDeleteValueメソッドが出てきたので「レジストリ値を操作するメソッド」をまとめておくと、レジストリ値を設定するのがSetValueメソッド、取得するのがGetValueメソッド、削除するのがDeleteValueメソッドである。これらのメソッドは、いずれもRegistryKeyクラスのメソッドだ。
ついでにレジストリ・キーの作成や削除についてもまとめておく。「レジストリ・キーを操作するメソッド」には、レジストリ・キーを開くOpenSubKeyメソッド、作成して開くCreateSubKeyメソッド、削除するDeleteSubKeyメソッド、さらにレジストリ・キーの下位にあるすべてのキー(サブ・キー)も含めて一括でレジストリ・キーを削除するDeleteSubKeyTreeメソッドがある。これらのいずれのメソッドも、RegistryKeyクラスのメソッドだ。
DeleteKeyメソッドやDeleteSubKeyTreeメソッドは、レジストリ・キーを開くわけではないのでCloseメソッドを呼び出す必要はない。これらのメソッドは単独で呼び出すことができる。例えば、
Registry.LocalMachine.DeleteSubKey(@"SOFTWARE\Insider.NET\.NET TIPS");
| カテゴリ:クラス・ライブラリ 処理対象:レジストリ 使用ライブラリ:Registryクラス(Microsoft.Win32名前空間) 使用ライブラリ:RegistryKeyクラス(Microsoft.Win32名前空間) 関連TIPS:レジストリの値を取得するには? 関連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を使う方法を解説する
|
|
- Hud美さんと学ぶRedmine×Jenkinsの神アジャイル
- Server 2012でサーバの初期設定作業を行う
- アドビの本気度が詰まったAdobe Maxまとめ
- DB・要件定義が通じない? 顧客の知識レベルを探る
- 「初音ミク」や「ゆるキャラ」の商標権ってどうなの?
- 見落としがちな整数関連の脆弱性(前編)
- フェイルオーバー構成がサポートされたDHCPサービス
- データ・コレクションをバインドするには?
- iOSアプリのUIを爆速で激ヤバにする2つのライブラリ
- (iOS 6版)iPhone/iPod touchのカレンダー活用術
- 想定するユーザーを「ペルソナ」としてモデリングする
- 補助簿で確認。いちごクレープ何枚売れた?
キャリアアップ
- - PR -
イベントカレンダー
- - PR -
転職/派遣情報を探す
**先週の人気講座ランキング**
〜 Android編 〜
ホワイトペーパー(TechTargetジャパン)
「ITmedia マーケティング」新着記事
第4回 SFA/CRMの「見える化」と名刺管理の「見える化」
今回は、名刺管理サービスとSFA/CRMの「見える化」の違いを検討します。名刺管理サービ...
Googleの調査結果――店舗で買い物をする顧客の82%は、モバイルサーチで購入を決めている
「店舗内で、購入時にスマートフォンを利用した経験のある顧客の割合」については、84%...
第2回 レビューサイトがアプリを選定/記事化する基準
アプリ開発に携わる人なら誰でも自分の制作したアプリの認知を広げ、ダウンロードを加速...


