第5回  「レジストリって何だ!?」



レジストリとは

ウィンドウズを使っている人ならば、一度は「レジストリ」という言葉を聞いた事があるのではないでしょうか?
レジストリというのは、ウィンドウズの設定情報等を記録しているモノの事です。
例えば、ディスプレイの解像度、ユーザ固有の情報、ファイルの関連付け、各種ソフトの設定・・・
といった様々な情報を記録しています。

試しに、自分のコンピュータの設定情報を調べてみましょう。
「スタート」ボタンから「ファイル名を指定して実行」を選択し、「regedit」と入力してみましょう。
「レジストリエディタ」というソフトが起動するはずです。

見た目は「エクスプローラ」によく似ていますね。
実際、操作方法もよく似ています。
では、画面左側の部分を操作して、フォルダを開く時と同じ要領で、
「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion」
というフォルダ(これをキーと呼ぶ)を開いて見て下さい。

すると、「エクスプローラ」でフォルダの中身を見るのと同じように、
画面右側にファイル(これを値と呼ぶ)の一覧が表示されていますね。
その中に「RegisteredOwner」という所があると思います。
そして、そこには貴方の名前が表示されているはずです。

そう、この部分は使用者の名前を記録している場所なのです。
では、この部分を書き換えるとどうなるのでしょうか?
答えは勿論、「使用者の名前が変更される」です。
では、実際に書き換えてみましょう。

画面右側の「RegisteredOwner」という所を右クリックしてみて下さい。
すると「変更」というメニューが表示されますので、そこをクリックします。
「文字列の編集」というウィンドウが表示され、
「値の名前」「RegisteredOwner」
「値のデータ」「貴方のお名前」
というような内容になっていますね。

では、「値のデータ」を適当な名前に変更して、「OK」のボタンを押してみましょう。
すると、先ほど書き換えた名前が、レジストリエディタの画面右側にも表示されていると思います。
これで書き換えは終了しました。右上の「×」ボタンを押して、レジストリエディタを終了しておきましょう。

ところで、先ほど変更した内容がちゃんと反映されているかを確認しておきましょうか。
デスクトップの画面左上に「マイコンピュータ」のアイコンがありますよね。
これを右クリックして、「プロパティ」を選択して下さい。
どうです?表示された画面の「使用者」の欄が、先ほど書き換えた名前になっているでしょう?

とまあ、このようにレジストリには様々な情報が設定されており、その値を書き換えることもできるわけです。


それではゲームとの関係は?

レジストリには様々な情報が記録されているという事は分かりましたね。
では、ゲームを改造する時にはどのように使用するのでしょうか?

多くのゲームは、レジストリを使用する場合、せいぜい「インストール先のフォルダ」
「ウィンドウのサイズ」「CDドライブ名」といった内容しか記録していません。
これでは改造する(書き換える)意味がありませんね。

ただし、ゲームの中には希にレジストリにセーブデータを記録しているものもあります。
特にCGモードONのフラグ等を記録する場合が多いようです。
そういった特殊なゲームを改造する場合は、レジストリを書き換える必要があるわけです。

書き換えは、先ほど「使用者の名前」を書き換えた要領で行えばOKです。
つまり、レジストリエディタを使えば誰でも書き換えは行えるのです。
また、レジストリエディタはWindowsに標準でインストールされていますので、
わざわざ自分で別途インストールする必要もありません。

じゃあ、改造ツールなんて必要ないじゃん。
と思うかもしれませんが、ちょっと待って下さい。
たしかにレジストリエディタを使用すれば、書き換えは行えます。

ですが、前述したように、レジストリには様々な情報が記録されています。
もし、システムの重要な設定を誤って書き換えてしまった場合、
OSが二度と起動しなくなる事もありえるのです。

つまり改造ツールを使ってレジストリを改造する事の意義は、
「安全に書き換えを行う」という安全面と、
「何処を書き換えるのかをユーザーが知る必要が無い」という省力化の面にあるわけです。


ツールから書き換えを行う

それではサンプルプログラムを使って、先ほどの「使用者」の部分をもう一度書き換えましょう。
「s_reg.vbp」をVBで開いて実行します。
すると以下のような画面になります。


レジストリのキー名   
レジストリの値名    書き込む値    
書き込む値の型 BINARY ▼

ファイルやメモリの書き換えとは少し画面が違う事に気が付きましたでしょうか?
これにはいくつか理由があります。

ファイルやメモリについては、別のOSでも基本的な取り扱いは同じなのですが、
ここで扱うレジストリは、Windows特有のものなので、操作等もかなり変わってしまいます。
よって、「アドレスがどうの」という話は今回は出てきませんし、
「全ての値を16進数で表現する」という事もありません。

では、先ほどの改造を行うために、以下のような内容を入力して下さい。


レジストリのキー名 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
レジストリの値名 RegisteredOwner 書き込む値 貴方のお名前
書き込む値の型 STRING ▼

「レジストリのキー名」「レジストリの値名」「書き込む値」は、先ほどのレジストリエディタの時と全く同じです。
1つ違うのは、「書き込む値の型」という項目があるという事です。
これは、読んで時の如く、書き込みたい値の型を示します。

レジストリに記録されるデータは、大きく3つの種類に分けられます。
1.BINARY
2.STRING
3.DWORD
の3つです。

それぞれを説明しますと、
1.バイナリファイルやメモリの時に使用した、16進数の値
2.名前等の文字列
3.32ビットの符号無し整数(具体的には「0x12345678」等)
というようになります。

この中でゲームの改造に使うのは、おそらく1番が多いでしょう。
2番も「キャラクターの名前の変更」等に使用するかもしれません。
3番は、ここでは気にしなくて結構です。

実際にデータを書き換える場合には、データそのものだけでなく、
データの型も同時に指定する必要があります。
今回は名前ですので、STRING を指定すればよいわけです。

それではこのプログラムのソースを見ていきましょう。


s_reg ソースプログラム1
Private Sub cmdExecute_Click()
    ret = RegistryEdit(txtRegistryKey.Text, txtAtaiName.Text, txtAtaiData.Text, cmbAtaiFormat.Text)

    If ret = 0 Then
      MsgBox "書き換えに成功しました"
    Else
      MsgBox "エラーです" & vbCrLf & "エラー番号 " & ret
    End If
End Sub


どうでしょう?ファイルやメモリの時とほぼ同じですね。
最も大きな違いは、「RegistryEdit」関数には、引数を4つ指定しているという事です。
では、この4つの引数を説明します。

「txtRegistryKey.Text」・・・レジストリのキー名
「txtAtaiName.Text」・・・・・レジストリの値名
「txtAtaiData.Text」・・・・・・書き込む値
「cmbAtaiFormat.Text」・・書き込む値の型

この4つの引数を与えて関数を実行すると、実行結果が戻り値として返されます。
後は、ファイルやメモリ書き換えの時と同じですので、特に説明は不要かと思います。

ところで、このプログラムには「コンボボックス」というコントロールを使用しています。
書き込むデータの値は3種類しか無いので、ユーザーがいちいち入力するのは手間がかかるだろうという事で、
3つのデータから1つを選択するようにしたものです。
以下にその部分のソースを記述します。


s_reg ソースプログラム2
Private Sub Form_Load()
    cmbAtaiFormat.AddItem "BINARY"
    cmbAtaiFormat.AddItem "STRING"
    cmbAtaiFormat.AddItem "DWORD"
    cmbAtaiFormat.ListIndex = 0
End Sub


詳しくはVBのヘルプ「AddItem」「ListIndex」を見て頂くとして、簡単な説明だけしておきます。
1〜3行目で、「コンボボックス」に表示させたいデータを1つ1つ登録しています。
4行目で、最初に表示される項目を、登録されたデータの先頭に指定しています。
ここでは、「BINARY」を一番目に登録していますので、これが表示される事になります。

このように、このコントロールは、データの入力の手間を省くものとして有効です。
また、複数の値から1つを選択するというのであれば、「オプションボタン」を使用する方法もあります。


これでレジストリの解説はおしまいです。
レジストリにはWindowsの様々な設定情報が記録されているという点は理解してもらえたと思います。
つまり、どのキーのどの値を変えれば、どのような設定を変えられるという事を、
関連書籍(レジストリがどうのというタイトルの本)を見て調べておけば、
このサンプルプログラムを参考に、Windows環境設定ツールを作ることも可能だという事です。

レジストリの書き換えには注意が必要ですが、慣れてくると様々な事ができますので
一度は簡単な環境設定変更を、ツールを使って試してみるのも面白いと思います。



前に戻る     次に進む

講座の初めに戻る