トップへ戻る

Autoitプログラミング

レジストリの読み取りと書き込み

レジストリは Windows の基本情報やソフトウェアの拡張情報などが保存される場所です。

 

Windows のスタートアップ、サービスの有効または無効化等の設定もレジストリを編集することで可能になります。

 

API を使用せずに AutoIt の内部関数だけでレジストリの読み取り、書き込みができます。

 

この章ではレジストリの読み取り、書き込み方法を説明していきます。

 

レジストリを変更するアプリケーションを開発する場合、読み取りは問題ありませんが、

 

書き込み、削除には特に注意してください。

 

レジストリに不正な値を追加したり、誤った値を削除すると、最悪 Windows が起動できなくなる恐れがありますので、

 

書き込みを行う前には必ずバックアップを取っておきましょう。

 

※管理権限の必要なキーににアクセスする場合、読み書きが失敗するので、スクリプトの最初に

 

「#RequireAdmin」を追加する必要があります。

レジストリを読み取る

RegRead 関数:レジストリから指定した値のデータを読み取る。

 

形式:RegRead ( "キー名", "値の名前" )

 

次のコードはプログラムファイルの保存されているフォルダーの場所を取得するサンプルです。

 

$var = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion", "ProgramFilesDir")

 

MsgBox(4096, "", "プログラムファイルは次の場所にあります:" & @CRLF & $var & " フォルダー")

 

 

 

レジストリの読み取りは RegRead 以外にも2つ特別な関数があります。

 

RegEnumKey と RegEnumVal。

 

RegEnumKey 関数 :レジストリのサブキー名を読み取る

 

形式:RegEnumKey ( "キー名", 序数(順序数))

 

RegEnumVal 関数 :レジストリの値の名前を読み取る

 

形式:RegEnumVal ( "キー名", 序数(順序数))

 

 

For $i = 1 To 100

 

    $var = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $i)

 

    If @error <> 0 Then ExitLoop

 

    MsgBox(4096, "", "スタートアップ項目:" & $i & @CRLF & $var)
Next

 

 

 

For $i = 1 To 10

 

    $var = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE", $i)

 

    If @error <> 0 Then ExitLoop

 

    MsgBox(4096, "", " インストールされている第" & $i & "のアプリケーション: " & @CRLF & $var)

 

Next

 

 

 

 

実際に実行して確認してみましょう。

レジストリへの書き込み・削除

RegWrite 関数:レジストリにキー、値を作成します。

 

形式:RegWrite ( "キー名" [,"値の名前" [, "種類" [, 値のデータ]]] )

 

種類:

 

"REG_SZ" = 文字列値

 

"REG_MULTI_SZ" = 複数行文字列値

 

"REG_EXPAND_SZ" = 展開可能な文字列値

 

"REG_DWORD" = DWORD(32ビット)値

 

"REG_QWORD" = QWORD(64ビット)値

 

"REG_BINARY" = バイナリ値

 

※パラメータは4つありますが、角カッコで囲まれているパラメータは省略可能という意味です。

 

実行前に必ず レジストリの読み取りと書き込み をお読みください。

 

次のコードはレジストリにキー、値の作成、値のデータの変更をするサンプルです。

 

レジストリエディタを開き、メッセージボックスが表示されるたびにレジストリエディタをアクティブにし、

 

F5キーで最新の情報に更新して追加されたキー、値を確認してみましょう。

 

 

; HKEY_CURRENT_USER\Software\Test キー下に文字列値"TestKey"を作成し、
; 値のデータに"Hello this is a test"を書き込みます。

 

RegWrite("HKEY_CURRENT_USER\Software\Test", "TestKey", "REG_SZ", "Hello this is a test")
$read = RegRead("HKEY_CURRENT_USER\Software\Test", "TestKey")

 

MsgBox(0, '', $read)

 

 

; 文字列値"TestKey"の値のデータを"こんにちは"に変更します。

 

RegWrite("HKEY_CURRENT_USER\Software\Test", "TestKey", "REG_SZ", "こんにちは")

 

$read = RegRead("HKEY_CURRENT_USER\Software\Test", "TestKey")

 

MsgBox(0, '', $read)

 

 

; HKEY_CURRENT_USER\Software\Test キー下に複数行文字列値"TestKey1"を作成し、
; 値のデータに"Hello1" & @LF & "Hello2"を書き込みます。

 

RegWrite("HKEY_CURRENT_USER\Software\Test", "TestKey1", "REG_MULTI_SZ", "Hello1" & @LF & "Hello2")

 

$read = RegRead("HKEY_CURRENT_USER\Software\Test", "TestKey1")

 

MsgBox(0, '', $read)

 

 

; HKEY_CURRENT_USER\Software\Test キー下にバイナリ値"TestKey2"を作成し、
; 値のデータに 0x01 を書き込みます。

 

RegWrite("HKEY_CURRENT_USER\Software\Test", "TestKey2", "REG_BINARY", 0x01)

 

$read = RegRead("HKEY_CURRENT_USER\Software\Test", "TestKey2")

 

MsgBox(0, '', $read)

 

 

; "HKEY_CURRENT_USER\Software\Test1"キーのみを作成します。

 

RegWrite("HKEY_CURRENT_USER\Software\Test1")

 

 

 

 

それでは先ほど作成したキー、値を削除してみましょう。

 

 

; "HKEY_CURRENT_USER\Software\Test"キー下の値"TestKey"を削除します。

 

RegDelete("HKEY_CURRENT_USER\Software\Test", "TestKey")

 

MsgBox(0, '', '"TestKey"値が削除されたか確認してみましょう。')

 

; "HKEY_CURRENT_USER\Software\Test"キーを削除します。

 

RegDelete("HKEY_CURRENT_USER\Software\Test")

 

MsgBox(0, '', '"Test"キーが削除されたか確認してみましょう。')

 

; "HKEY_CURRENT_USER\Software\Test1"キーを削除します。

 

RegDelete("HKEY_CURRENT_USER\Software\Test1")

 

MsgBox(0, '', '"Test1"キーが削除されたか確認してみましょう。')

 

 

 

 

値を削除する際に種類を指定する必要はありません。

 

名前を指定すれば、種類が何であれ削除されます。