今回は割と軽めの TRegistyrについて探りたいと思います。

レジストリへのアクセス

xDelphiでレジストリにアクセスする手段はいくつかあります。Iniファイルへのアクセス方法と互換を持つ TRegIniFileクラスを利用する方法。Registry操作用のAPIを直接使用する方法。それらの APIをカプセル化した TRegistryクラスを利用する方法。今回は TRegistryクラスの使い方を簡単に紹介していきます。

TRegistry クイックリファレンス

XVBプログラマにとってレジストリへのアクセスは非常に困難でした。なんせ標準で用意されている関数からは HKEY_CURRENT_USER\Software\VB and VBA Program Setting 以下の範囲しかアクセスできなかったからです。HKEY_LOCAL_MACHINE や HKEY_CLASSES_ROOT へアクセスするには複雑な APIを直接使用するしかありませんでした。Delphiではそれら APIをラッピングした TRegistryクラスが用意されています。これを使えばレジストリのどこへでもアクセスができます。では早速使ってみましょう!以下のサンプルは HKEY_LOCAL_MACHINE に格納されている Windowsの使用メ名を取得し、表ヲします。


{TRegistryの簡単なサンプル} uses Registry; //これが必要 procedure TForm1.Button1Click(Sender: TObject); var Reg : TRegistry; begin Reg := TRegistry.Create; //ルートキーを変更します。デフォルトは HKEY_CURRENT_USER です。 Reg.Rootkey := HKEY_LOCAL_MACHINE; //以下のキーを開きます。無い場合は false を返します。 if Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion', false )then begin Label1.Caption := Reg.ReadString('RegisteredOwner'); Reg.CloseKey: end; Reg.Free; end;

Xなんて簡単なんでしょう!ルートキーを変更する場合は TRegistryクラスの RootKeyプロパティを変更します。これには以下の定数が使用できます。

キーを開く場合は OpenKeyメソッドを使います。第2引数にはキーが無かった場合にそのキーを作るかどうかを指定します。値を読み込むには Read〜 メソッドを使います。引数には値の見出しを指定します。 RegEditで (標準) と表ヲされる値を読み込むには '' を指定します。

キーの一覧を取得する

Xコントロールパネルの "アプリケーションの追加と削除" に表ヲされるアプリケーションは \HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft \Windows \CurerntVersion \Uninstall の下に以下のように登録されています。

この、キーの一覧を取得するのはちょっと大変です。なぜならキーの名前がわからないからです。

Reg.OpenKey('\SOFTWARE\...\CurrentVersion\Uninstall\?????', false ) then


このような時のために TRegistryには、あるキーの下のキーの一覧を取得する便利なメソッド、GetKeyNamesメソッドが用意されています。しかもその一覧を TStrings で返すのです!以下のサンプルは Uninstallキーの一覧をリストボックスに表ヲします。


{TRegistryでキーの一覧取得のサンプル} uses Registry; //これが必要 procedure TForm1.Button1Click(Sender: TObject); var Reg : TRegistry; begin Reg := TRegistry.Create; //ルートキーを変更します。デフォルトは HKEY_CURRENT_USER です。 Reg.Rootkey := HKEY_LOCAL_MACHINE; //以下のキーを開きます。無い場合は false を返します。 if Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall', false )then begin ListBox1.Items.BeginUpdate; //Uninstallキーより下のキーの一覧を ListBox1に表ヲします。 Reg.GetKeyNames(ListBox1.Items); ListBox1.Items.EndUpdate; Reg.CloseKey: end; Reg.Free; end;

Xなんて簡単なんでしょう!ListBoxの Itemsプロパティは TStrings型なので直接引数で渡すことができます。当然、TStringList型などの変数も渡すことができます。

調子に乗って関連付けを試みる

XTRegistryを使って独ゥの拡張子をゥ分のアプリに関連付けてみましょう。ここでは仮にアプリの名前が YPTApp.Exe、拡張子が .ypt とします。関連付けは HKEY_CLASSES_ROOTにいくつかのキーを追加することでタ現できます。以下のサンプルはキーの作成に OpenKeyを使っています(手抜き)


{TRegistryを使って関連付けるサンプル} uses Registry; //これが必要 procedure TForm1.Button1Click(Sender: TObject); var Reg : TRegistry; begin Reg := TRegistry.Create; Reg.Rootkey := HKEY_CLASSES_ROOT; Reg.OpenKey('.ypt', true); //関連付ける拡張子 Reg.WriteString('','YPTApp'); //起動するアプリの名称 Reg.OpenKey('\YPTApp',true); //同じく起動するアプリの名称 Reg.WriteString('','YPT Application'); //アプリの正紫ハ松:/FONT> Reg.OpenKey('\YPTApp\shell\open\command',true); //関連付けに必要なキー Reg.WriteString('','c:\program\yptapp.exe'); //起動するアプリの絶対パス Reg.CloseKey; Reg.Free; end;

Xこれで関連付けは完了ですが、タ際にはさらに関連付けられたアプリ側で引数をチェックするコードが必要になります。これは ParamCount、 ParamStr で調べることが可能です。また、アイコンも指定したい場合は DefaultIconキーをつくり(HKEY_CLASSES_ROOT \App \DefaultIcon)その値('')に Exeファイルのパスとアイコンのインデックスを指定します('yptapp.exe,0')。最初のアイコンのインデックスがゼロです。

その他の機能

XTRegistryにはこれ以外にもたくさんの機能があります。キーの追加や削除、移動は当然のこと、例えばあるキーの一覧をファイルに出力する SaveKeyなどがあります。簡単でしたが TRegistryの使い方でした。



Delphi Acid Floor -TechDocs- Copyright 1998 Toyota