レジストリの操作をマスターしよう (実践編.1)

説明
レジストリにキーの作成・値の設定/取得ができるようにになりました。
でもこれで終わってしまったら少しつまらないので、実用的な実践をしてみましょう。

話はいきなり変わりますがWindowsを使用している以上は「Internet Exploer(以下、IE)」というのが
標準でインストールされています。多くの方はインターネットでネットサーフィンをする
ブラウザとしてこれを使用しているのではないでしょうか。

このIEと対抗して「Netscape Navigator(以下、NN)」というブラウザがあります。
この2つのソフトの起動速度を比べた場合、圧倒的にIEのほうが起動が早いです。
実はIEはWindowsが起動した時点でバックグラウンドで起動しているのです。
それに比べてNNのほうは最初から起動するので、起動速度では負けるに決まっています。

ではどうやって起動しているのでしょうか。
スタートボタンの「プログラム」−「スタートアップ」の項目にはIEは登録されていません。

実はレジストリの「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run」というキーに
登録されています。今回のサンプルはここにデータを設定してみましょう。

下のプログラムは、Windows起動時に指定のプログラムを起動させるためのプログラムです。
このプログラムを実行した後に指定のプログラムを起動しないようにするには
「レジストリエディタ」を起動して、キーを削除してください。
Dim rc As Long, sError As String
Dim lngResult As Long, lngDisposition As Long
Dim udtSECURITY_ATTRIBUTES As SECURITY_ATTRIBUTES
Dim temp As String, tempLong As Long
Dim dat(256) As Byte
Dim dwLabel(1) As String

'レジストリにキーを作成する
rc = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Run", 0&, vbNullString, _
    REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, udtSECURITY_ATTRIBUTES, lngResult, lngDisposition)

If rc = ERROR_SUCCESS Then
    temp = Me.Text1.Text
    a = 0
    For b = 1 To Len(temp)
        c = Asc(Mid(temp, b, 1))
        If c > &H39 Or c < &H30 Then a = 1: Exit For
    Next
    If a = 1 Then
            rc = RegSetValueEx(lngResult, "Startup", 0, REG_SZ, ByVal temp, Len(temp) + 1)
    End If
    If rc <> 0 Then
        'エラーコードからエラーメッセージを取得
        sError = String(260, vbNullChar)
        Call FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ByVal 0&, rc, 0, sError, Len(sError), 0)
        MsgBox sError
    Else
        MsgBox "「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run」に設定しました"
    End If
Else
    'エラーコードからエラーメッセージを取得
    sError = String(260, vbNullChar)
    Call FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ByVal 0&, hKey, 0, sError, Len(sError), 0)
    MsgBox sError
End If
(上)成功すると上図のようになる
(上)Windows起動直後に「コマンドプロント」を表示するようにした
サンプル
ダウンロード(RegSetValueEx2.lzh 3.73KB)