53.レジストリのキーを列挙する
< 使用用途 >
レジストリのサブキーを列挙する
今回のサンプルソースをダウンロードする方は下記の「ダウンロード」を!
=> ダウンロード ・・・ 下に書いてあるサンプルソースと同じです
< 説明 >
API関数のRegEnumKeyExを使用します。
RegEnumKeyEx=>レジストリのサブキーを列挙する
<引数>
hKey&:レジストリのハンドル
dwIndex&:インデックス
lpName$:サブキー名が入る
lpcbName:同、文字数
lpReserved&:常に0
lpClass$:常に0
lpcbClass&:常に0
lpftLastWriteTime:FILETIME構造体
@戻り値@
正常終了のとき ERROR_SUCCESS
*レジストリのハンドルはRegOpenKeyExを参照
< SAMPLE >
'ここでは「HKEY_CURRENT_USER\Software」のサブキーを列挙します
'標準モジュール
Public Type FILETIME
dwLowDateTime As Long '下位32ビット
dwHighDateTime As Long'上位32ビット
End Type
'指定のレジストリキーのサブキーを列挙する
Public Declare Function RegEnumKeyEx Lib "ADVAPI32" Alias "RegEnumKeyExA"
(ByVal hKey&, ByVal dwIndex&, ByVal lpName$, lpcbName&, lpReserved&,
ByVal lpClass$, lpcbClass&, lpftLastWriteTime As FILETIME) As Long
'レジストリのハンドルを解放する
Public Declare Function RegCloseKey Lib "ADVAPI32" (ByVal hKey&)
As Long
'レジストリのキーを開ける(ハンドルの確保)
Public Declare Function RegOpenKeyEx Lib "ADVAPI32" Alias "RegOpenKeyExA"
(ByVal hKey&, ByVal lpSubKey$, ByVal ulOptions&, ByVal samDesired&,
phkResult&) As Long
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_DYN_DATA = &H80000006
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
Public Const ERROR_SUCCESS = 0&
'ここからはフォームの処理
Private Sub Command1_Click()
Dim Moji As String
Dim Nagasa As Long
Dim File As FILETIME
Dim i As Long
Dim Ret As Long
List1.Clear
'バッファを確保する
Moji = String(250, Chr(0))
Nagasa = Len(Moji)
'キーをオープンしてハンドルを得る
Ret = RegOpenKeyEx(HKEY_CURRENT_USER, Text2.Text, 0, 1, Hensu)
Do
'サブキーを取得
Ret = RegEnumKeyEx(Hensu, i, Moji, Nagasa, 0, 0, 0, File)
'エラーだったらループを抜ける
If Ret <> ERROR_SUCCESS Then Exit Do
'リストに追加していく
List1.AddItem Moji
'初期化する
Moji = String(250, Chr(0))
Nagasa = Len(Moji)
i = i + 1
Loop
'ハンドルを解放
Call RegCloseKey(Hensu)
End Sub