レジストリキーに関する情報を取得(U)          <TOP>


RegOpenKeyEx レジストリのキーのハンドルを確保
SHQueryInfoKey レジストリキーに関する情報を取得
RegCloseKey レジストリのハンドルを解放
 

 

'================================================================
'= レジストリキーに関する情報を取得
'=    (SHQueryInfoKey.bas)
'================================================================
#include "Windows.bi"

#define HKEY_USERS -2147483645          'Windowsを利用するユーザー個別の情報
#define HKEY_LOCAL_MACHINE -2147483646  'PCを利用するユーザーに共通の設定情報
#define HKEY_CURRENT_USER -2147483647   '現在Windowsにログインしているユーザーの情報
#define HKEY_CLASSES_ROOT -2147483648   '拡張子に関する情報や、それらとアプリケーションとの関連づけに関する情報
#define KEY_QUERY_VALUE &H1             'サブキーデータを問い合わせるためのアクセス権
#define ERROR_SUCCESS &H0               '正常終了の戻り値を示す

' レジストリのキーのハンドルを確保
Declare Function Api_RegOpenKeyEx& Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey&, ByVal lpSubKey$, ByVal ulOptions&, ByVal samDesired&, phkResult&)

' レジストリキーに関する情報を取得
Declare Function Api_SHQueryInfoKey& Lib "Shlwapi" Alias "SHQueryInfoKeyA" (ByVal hkey&, pcSubKeys&, pcchMaxSubKeyLen&, pcValues&, pcchMaxValueNameLen&)

' レジストリのハンドルを解放
Declare Function Api_RegCloseKey& Lib "advapi32" Alias "RegCloseKey" (ByVal hKey&)

Var Shared List1 As Object
Var Shared Button1 As Object

List1.Attach GetDlgItem("List1") : List1.SetFontSize 14
List1.SetWindowSize 202, 62
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var SubKey As String
    Var hSubKey As Long
    Var SubKeys As Long
    Var SubKeyLength As Long
    Var Values As Long
    Var ValueNameLength As Long
    Var Ret As Long

    'リストビューを初期化
    List1.ResetContent

    'サブキーを設定
    SubKey = ""

    'レジストリを読み取りモードでオープン
    Ret = Api_RegOpenKeyEx(HKEY_LOCAL_MACHINE, SubKey, 0, KEY_QUERY_VALUE, hSubKey)

    'オープンできたときは
    If Ret = ERROR_SUCCESS Then
        '指定したキーのレジストリ情報を取得
        Ret = Api_SHQueryInfoKey(hSubKey, SubKeys, SubKeyLength, Values, ValueNameLength)

        'レジストリ情報が取得できたとき
        If Ret = ERROR_SUCCESS Then
            'レジストリ情報を表示
            List1.AddString "サブキーの数        :" & Str$(SubKeys)
            List1.AddString "サブキーの最大文字数:" & Str$(SubKeyLength)
            List1.AddString "値の数              :" & Str$(Values)
            List1.AddString "値の最大文字数      :" & Str$(ValueNameLength)

        'レジストリ情報が取得できなかったとき
        Else
            'エラーメッセージを表示
            List1.AddString "取得できませんでした。"
        End If

        'ハンドルをクローズ
        Ret = Api_RegCloseKey(hSubKey)

    'オープンできなかったとき
    Else
        'エラーメッセージを表示
        List1.AddString "オープンできませんでした。"
    End If
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End