レジストリキーが持つ値を列挙 <TOP>
SHEnumValue
指定されたレジストリキーが持つ値を列挙
RegEnumValue 指定されたレジストリキーが持つ値を列挙
RegOpenKeyEx レジストリのキーのハンドルを確保
RegCloseKey レジストリのハンドルを解放
'================================================================ '= レジストリキーが持つ値を列挙 '= (SHEnumValue.bas) '================================================================ #include "Windows.bi" ' 指定されたレジストリキーが持つ値を列挙 Declare Function Api_SHEnumValue& Lib "shlwapi" Alias "SHEnumValueA" (ByVal hKey&, ByVal dwIndex&, ByVal pszsValueName$, ByRef pcchValueName&, ByRef pdwType&, ByRef pvData As Any, ByRef pcdData&) ' 指定されたレジストリキーが持つ値を列挙 Declare Function Api_RegEnumValue& Lib "advapi32" Alias "RegEnumValueA" (ByVal hKey&, ByVal dwIndex&, ByVal lpsValueName$, ByRef lpcbValueName&, ByVal lpReserved&, ByRef lpType&, ByRef lpData As Any, ByRef lpcbData&) ' レジストリのキーのハンドルを確保 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&) #define HKEY_CLASSES_ROOT -2147483648 '拡張子に関する情報や、それらとアプリケーションとの関連づけに関する情報 #define HKEY_CURRENT_CONFIG -2147483643 'Display解像度/Font等の画面表示に関するカレントユーザーの情報、プリンターに関する情報 #define HKEY_CURRENT_USER -2147483647 '現在Windowsにログインしているユーザーの情報 #define HKEY_DYN_DATA -2147483642 '動的に変化する様々な情報 #define HKEY_LOCAL_MACHINE -2147483646 'PCを利用するユーザーに共通の設定情報 #define HKEY_USERS -2147483645 'Windowsを利用するユーザー個別の情報 #define REG_BINARY 3 'バイナリデータ #define REG_DWORD 4 '32ビットの数値 #define REG_DWORD_BIG_ENDIAN 5 'ビッグエンディアン形式の32ビット数値 #define REG_DWORD_LITTLE_ENDIAN 4 'リトルエンディアン形式の32ビット数値(REG_DWORDと同等) #define REG_EXPAND_SZ 2 '展開前の環境変数への参照が入ったヌル終端文字列 #define REG_LINK 6 'Unicodeシンボリックリンク #define REG_MULTI_SZ 7 'ヌル終端文字列の配列 #define REG_NONE 0 '定義されていない型 #define REG_QWORD 11 '64ビット数値 #define REG_QWORD_LITTLE_ENDIAN 11 'リトルエンディアン形式の64ビット数値(REG_QWORDと同等) #define REG_RESOURCE_LIST 8 'デバイスドライバのリソースリスト #define REG_SZ 1 'ヌル終端文字列 #define ERROR_SUCCESS &H0 '正常終了の戻り値を示す #define ERROR_NO_MORE_ITEMS 259 ' #define SYNCHRONIZE &H100000 ' #define STANDARD_RIGHTS_READ &H20000 '(READ_CONTROL)オブジェクトのセキュリティ記述子の読み取り許可 #define KEY_QUERY_VALUE &H1 'サブキーデータを問い合わせるためのアクセス権 #define KEY_SET_VALUE &H2 #define KEY_CREATE_SUB_KEY &H4 #define KEY_ENUMERATE_SUB_KEYS &H8 #define KEY_NOTIFY &H10 #define KEY_CREATE_LINK &H20 #define KEY_READ ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE)) #define KEY_ALL_ACCESS &H3F Var Shared Radio(2) As Object Var Shared List1 As Object Var Shared Combo1 As Object Var Shared Edit1 As Object Var Shared Button1 As Object For i = 0 To 2 Radio(i).Attach GetDlgItem("Radio" & Trim$(Str$(i + 1))) Radio(i).SetFontSize 12 Next List1.Attach GetDlgItem("List1") : List1.SetFontSize 12 Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14 Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Function Index bdecl () As Integer Function Index() Index = Val(Mid$(GetDlgRadioSelect("Radio1"), 6)) - 1 End Function '================================================================ '= '================================================================ 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" Edit1.SetWindowText "Software\Microsoft\Visual Basic\6.0" End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var lKey As Long Var hKey As Long Var sValueName As String Var lValueName As Long Var lType As Long Var sData As String Var lData As Long Var Subkey As String Var Item As Long Var i As Long Var Ret As Long Item = Combo1.GetCursel If Item < 0 Then A% = MessageBox("", "[HKEY_]項目を選択してください!", 0, 2) Exit Sub End If Select Case Item Case 0 hKey = HKEY_CLASSES_ROOT Case 1 hKey = HKEY_CURRENT_USER Case 2 hKey = HKEY_LOCAL_MACHINE Case 3 hKey = HKEY_USERS Case 4 hKey = HKEY_CURRENT_CONFIG End Select List1.Resetcontent Subkey = Edit1.GetWindowText Ret = Api_RegOpenKeyEx(hKey, Subkey, 0, KEY_ALL_ACCESS, lKey) If Ret <> ERROR_SUCCESS Then Exit Sub i = 0 Do lValueName = 1000 sValueName = String$(lValueName, 0) lData = 2000 sData = String$(lData, 0) lType = REG_SZ Select Case Index Case 0 Ret = Api_SHEnumValue(lKey, i, sValueName, lValueName, lType, sData, lData) Case 1 Ret = Api_RegEnumValue(lKey, i, sValueName, lValueName, 0, lType, sData, lData) Case 2 Ret = Api_RegEnumValue(lKey, i, sValueName, lValueName, 0, lType, ByVal 0, 0) End Select If Ret <> ERROR_SUCCESS Then Exit Do sValueName = Left$(sValueName, lValueName) sData = Left$(sData, lData) List1.AddString sValueName & "(" & Str$(lType) & ")" & "=" & sData i = i + 1 Loop Ret = Api_RegCloseKey(lKey) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End