レジストリのサブキーを列挙 <TOP>
レジストリのサブキーを列挙します。
RegOpenKeyEx レジストリキーのハンドルを取得
RegCloseKey レジストリのハンドルを解放
SHEnumKeyEx レジストリのサブキーを列挙
'================================================================ '= レジストリのサブキーを列挙
'= (RegSubKeyList.bas) '================================================================ #include "Windows.bi" ' レジストリのキーのハンドルを確保 Declare Function Api_RegOpenKeyEx& Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey&, ByVal lpSubKey$, ByVal ulOptions&, ByVal samDesired&, phkResult&) ' レジストリのハンドルを解放 Declare Function Api_RegCloseKey& Lib "advapi32" Alias "RegCloseKey" (ByVal hKey&) ' レジストリのサブキーを列挙 Declare Function Api_SHEnumKeyEx& Lib "Shlwapi" Alias "SHEnumKeyExA" (ByVal hKey&, ByVal dwIndex&, ByVal pszName$, pcchName&) #define HKEY_CLASSES_ROOT -2147483648 '拡張子に関する情報や、それらとアプリケーションとの関連づけに関する情報 #define HKEY_CURRENT_USER -2147483647 '現在Windowsにログインしているユーザーの情報 #define HKEY_LOCAL_MACHINE -2147483646 'PCを利用するユーザーに共通の設定情報 #define HKEY_USERS -2147483645 'Windowsを利用するユーザー個別の情報 #define HKEY_CURRENT_CONFIG -2147483643 'Display解像度/Font等の画面表示に関するカレントユーザーの情報、プリンターに関する情報 #define HKEY_DYN_DATA -2147483642 '動的に変化する様々な情報 #define KEY_QUERY_VALUE &H1 'サブキーデータを問い合わせるためのアクセス権 #define REGSTR_MAX_VALUE_LENGTH 256 #define ERROR_NO_MORE_ITEMS 259 #define ERROR_SUCCESS &H0 '正常終了の戻り値を示す Var Shared List1 As Object Var Shared Combo1 As Object Var Shared Button1 As Object List1.Attach GetDlgItem("List1") : List1.SetFontSize 14 Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Combo1.AddString "HKEY_CLASSES_ROOT" Combo1.AddString "HKEY_CURRENT_USER" Combo1.AddString "HKEY_LOCAL_MACHINE" Combo1.AddString "HKEY_USERS" Combo1.AddString "HKEY_CURRENT_CONFIG" End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var hKeys As Long Var Item As Long Var hRegSubKey As Long Var strRegSubKey As String Var strRegEnumSubKey As String Var SubKeyIndex As Long Var SubKeyNameLength As Long Var Ret As Long Item = Combo1.GetCursel If Item < 0 Then A% = MessageBox("", "項目を選択してください!", 0, 2) Exit Sub End If Select Case Item Case 0 hKeys = HKEY_CLASSES_ROOT Case 1 hKeys = HKEY_CURRENT_USER Case 2 hKeys = HKEY_LOCAL_MACHINE Case 3 hKeys = HKEY_USERS Case 4 hKeys = HKEY_CURRENT_CONFIG End Select 'リストボックスをクリア List1.ResetContent 'サブキーを列挙するキーのパスを設定 strRegSubKey = "" 'レジストリを読み取りモードでオープン Ret = Api_RegOpenKeyEx(hKeys, strRegSubKey, 0, KEY_QUERY_VALUE, hRegSubKey) 'オープンエラーのとき If Ret <> ERROR_SUCCESS Then 'エラーを表示して終了 List1.AddString "キーのオープンに失敗しました" Exit Sub End If 'サブキーのインデックスを初期化 SubKeyIndex = 0 'サブキーの列挙が完了するまで処理を反復 Do '列挙するサブキー名の格納バッファを初期化 strRegEnumSubKey = Space$(REGSTR_MAX_VALUE_LENGTH) 'バッファサイズを初期化 SubKeyNameLength = Len(strRegEnumSubKey) 'インデックスで指定したサブキーを取得 Ret = Api_SHEnumKeyEx(hRegSubKey, SubKeyIndex, strRegEnumSubKey, SubKeyNameLength) '列挙するサブキーがないとき If Ret = ERROR_NO_MORE_ITEMS Then '反復処理終了 Exit Do End If 'リストボックスに取得したサブキーを追加 List1.AddString Left$(strRegEnumSubKey, InStr(strRegEnumSubKey, Chr$(0)) - 1) 'サブキーのインデックスを加算 SubKeyIndex = SubKeyIndex + 1 Loop 'レジストリをクローズ Ret = Api_RegCloseKey(hRegSubKey) End Sub '================================================================ '= '================================================================ Declare Sub Combo1_Change edecl () Sub Combo1_Change() List1.Resetcontent End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End