Home >> ヒント・サンプル集 >> プログラムサンプル >> (VBA[関数] レジストリ値の取得(文字列のみ)

<VBA> [関数] レジストリ値の取得(文字列のみ)
レジストリより値を取得します(文字列のみ)
※VBAのコマンドでは特定のレジストリの値の設定/取得しかできません
(HKEY_CURRENT_USER\SOFTWARE\VB and VBA Program Settings)
この関数を遣えば、Windows設定など上記以外も取得することができます

    Declare PtrSafe Function RegCloseKey Lib "ADVAPI32" (ByVal hKey As LongPtr) As Long
    Declare PtrSafe Function RegOpenKeyEx Lib "ADVAPI32" Alias "RegOpenKeyExA" (ByVal hKey As LongPtr, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
    Declare PtrSafe Function RegQueryValueExstr Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As LongPtr, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long

Function saGetRegValue(RootKey As String, SubKey As String, DName As String) As String
    '********************************************************
    '*** レジストリ値の取得(テキストのみ)
    '***
    '********************************************************

    Dim Valuedata As String
    Dim Length As Long
    Dim Ret, RK, hnd

    Select Case RootKey
        Case "HKCR", "HKEY_CLASSES_ROOT": RK = &H80000000
        Case "HKCU", "HKEY_CURRENT_USER": RK = &H80000001
        Case "HKCC", "HKEY_CURRENT_CONFIG": RK = &H80000005
        Case "HKDD", "HKEY_DYN_DATA": RK = &H80000006
        Case "HKLM", "HKEY_LOCAL_MACHINE": RK = &H80000002
        Case "HKU", "HKEY_USERS": RK = &H80000003
    End Select
    
    Ret = RegOpenKeyEx(RK, SubKey, 0, 1, hnd)
    If Ret = 0 Then

        Valuedata = String(250, Chr(0))
        Length = Len(Valuedata)
    
        Ret = RegQueryValueExstr(hnd, DName, 0, 0, Valuedata, Length)
        Else
        Valuedata = Chr(0)
    End If

    Call RegCloseKey(hnd)
    
    saGetRegValue = StrConv(LeftB(StrConv(Valuedata, vbFromUnicode), Length - 1), vbUnicode)
End Function


【引数】いずれも文字列です
・ルートキー
 - HKCR または HKEY_CLASSES_ROOT、
 - HKCU または HKEY_CURRENT_USER、
 - HKCC または HKEY_CURRENT_CONFIG、
 - HKDD または HKEY_DYN_DATA、
 - HKLM または HKEY_LOCAL_MACHINE、
 - HKU または HKEY_USERS
 のいずれかを渡します
・サブキー
・名前

【サンプル】
debug.print saGetRegValue("HKLM", "SYSTEM\CurrentControlSet\Services\i8042prt\Parameters", "OverrideKeyboardIdentifier")

【特記事項】
・文字列以外の値を取得したい場合は別の関数を使います

  お気軽にご相談ください お問合せ・ご相談はこちら お問合せ・ご相談はこちら  
更新日:2017/03/07 10:33