ユーザー指定キーのサブキーを列挙 <TOP>
SHRegOpenUSKey
ユーザー指定キーをオープン
SHRegEnumUSKey ユーザー指定キーのサブキーを列挙
SHRegCloseUSKey ユーザー固有のレジストリキーをクローズ
'================================================================ '= ユーザー指定キーのサブキーを列挙 '= (SHRegOpenUSKey.bas) '================================================================ #include "Windows.bi" ' ユーザー指定キーをオープン Declare Function Api_SHRegOpenUSKey& Lib "Shlwapi" Alias "SHRegOpenUSKeyA" (ByVal pszPath$, ByVal samDesired&, ByVal hRelativeUSKey&, phNewUSKey&, ByVal fIgnoreHKCU&) ' ユーザー指定キーのサブキーを列挙 Declare Function Api_SHRegEnumUSKey& Lib "Shlwapi" Alias "SHRegEnumUSKeyA" (ByVal hUSKey&, ByVal dwIndex&, ByVal pszName$, pcchName&, ByVal enumRegFlags&) ' ユーザー固有のレジストリキーをクローズ Declare Function Api_SHRegCloseUSKey& Lib "Shlwapi" Alias "SHRegCloseUSKey" (ByVal hUSKey&) #define KEY_QUERY_VALUE &H1 'サブキーデータを問い合わせるためのアクセス権 #define ERROR_SUCCESS &H0 '正常終了の戻り値を示す #define SHREGENUM_DEFAULT &H0 'HKEY_CURRENT_USERを列挙。HKEY_CURRENT_USERにキーがない場合、HKEY_LOCAL_MACHINEを列挙 #define SHREGENUM_HKCU &H1 'HKEY_CURRENT_USERを列挙 #define SHREGENUM_HKLM &H10 'HKEY_LOCAL_MACHINEを列挙 #define SHREGENUM_BOTH &H11 'HKEY_LOCAL_MACHINE・SHREGENUM_HKLMを列挙 #define REGSTR_MAX_VALUE_LENGTH 256 #define ERROR_NO_MORE_ITEMS 259 ' Var Shared List1 As Object Var Shared Radio(2) As Object Var Shared Button1 As Object List1.Attach GetDlgItem("List1") : List1.SetFontSize 14 : List1.SetWindowSize 216, 78 For i = 0 To 2 Radio(i).Attach GetDlgItem("Radio" & Trim$(Str$(i + 1))) : Radio(i).SetFontSize 14 Next i 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() ShowWindow -1 Cls End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var hRegSubKey As Long Var sRegSubKey As String Var sRegEnumSubKey As String Var SubKeyIndex As Long Var SubKeyNameLength As Long Var RegFlags As Long Var Ret As Long 'リストボックスをクリア List1.ResetContent 'サブキーを列挙するキーのパスを設定 sRegSubKey = "" 'ユーザー固有のレジストリを問い合わせモードでオープン Ret = Api_SHRegOpenUSKey(sRegSubKey, KEY_QUERY_VALUE, 0, hRegSubKey, CLng(1)) 'オープンエラーのときは If Ret <> ERROR_SUCCESS Then 'エラーを表示して終了 List1.AddString "キーのオープンに失敗しました" Exit Sub End If Select Case Index Case 0 RegFlags = SHREGENUM_DEFAULT Case 1 RegFlags = SHREGENUM_HKCU Case 2 RegFlags = SHREGENUM_HKLM End Select 'サブキーのインデックスを初期化 SubKeyIndex = 0 'サブキーの列挙が完了するまで処理を反復 Do '列挙するサブキー名の格納バッファを初期化 sRegEnumSubKey = Space$(REGSTR_MAX_VALUE_LENGTH) 'バッファサイズを初期化 SubKeyNameLength = Len(sRegEnumSubKey) 'インデックスで指定したサブキーを取得 Ret = Api_SHRegEnumUSKey(hRegSubKey, SubKeyIndex, sRegEnumSubKey, SubKeyNameLength, RegFlags) '列挙するサブキーがないとき If Ret = ERROR_NO_MORE_ITEMS Then '反復処理終了 Exit Do End If 'リストボックスに取得したサブキーを追加 List1.AddString Left$(sRegEnumSubKey, InStr(sRegEnumSubKey, Chr$(0)) - 1) 'サブキーのインデックスを加算 SubKeyIndex = SubKeyIndex + 1 Loop 'オープンしたレジストリをクローズ Ret = Api_SHRegCloseUSKey(hRegSubKey) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End