レジストリキーが持つ値を列挙          <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