<Return[R]><Top>

RegQueryValueEx

Declare Function Api_RegQueryValueEx& Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey&, ByVal lpvName$, ByVal lpReserved&, ByVal lpType&, ByVal lpData$, lpcbData&)

Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long

指定されたレジストリキーに所属している、指定されたレジストリエントリのデータ型とデータを取得する。

パラメータ
hKey
    現在開いているキーのハンドルを指定する。

    代わりに、あらかじめ定義されている次の予約済みハンドルのいずれかを指定することもできる。
    HKEY_CLASSES_ROOT
    HKEY_CURRENT_CONFIG
    HKEY_CURRENT_USER
    HKEY_LOCAL_MACHINE
    HKEY_USERS
    Windows NT/2000:HKEY_PERFORMANCE_DATA も指定できる。
    Windows 95/98:HKEY_DYN_DATA も指定できる。
lpValueName
    問い合わせ対象のレジストリエントリの名前を保持している、NULL で終わる文字列へのポインタを指定する。
    NULL または空の文字列を指定した場合、この関数は、hKey パラメータで指定したキーに所属する名前なしのレジストリエントリ(<No  

    Name>、日本語版では <名前なし>)、または「(標準)」のレジストリエントリのデータ型とデータを取得する(これらのレジストリエント

    リが存在する場合に限る)。
    Windows 95/98:どのキーにも、既定のレジストリエントリが 1 個所属している。このレジストリエントリは名前が「(標準)」で、何もデー

    タを保持していない。レジストリエディタでは、「(値の設定なし)」と表示されている。Windows 95 では、既定のデータ型は必ず

    REG_SZ になっている。Windows 98 では、キー内の既定のレジストリエントリのデータ型は、最初は REG_SZ であるが、RegSetValueEx

    関数を使うと、既定のレジストリエントリに他のデータ型を割り当てるよう指定することもできる。
    Windows NT/2000:キーには <名前なし> や既定のレジストリエントリは存在しない。名前なしのレジストリエントリを作成した場合、任意

    のデータ型を割り当てることができる。
lpReserved
    予約されている。NULL を指定する。
lpType
    1 個の変数へのポインタを指定する。関数から制御が返ると、この変数に、レジストリエントリのデータ型が格納される。

    データ型が不要な場合、NULL を指定する。
lpData
    1 個のバッファへのポインタを指定する。関数から制御が返ると、このバッファに、レジストリエントリのデータが格納される。

    この情報が不要な場合、NULL を指定する。
lpcbData
    lpData パラメータで指定したバッファのサイズをバイト単位で保持している、1 個の変数へのポインタを指定する。関数から制御が返ると、

    この変数に、lpData バッファへコピーされたデータのサイズが格納される。
    データ型が REG_SZ、REG_MULTI_SZ、REG_EXPAND_SZ のいずれかである場合、終端の NULL が含まれる。
    lpData パラメータで NULL を指定した場合に限って、lpcbData パラメータで NULL を指定できる。
    lpData パラメータが指すバッファのサイズが不足して、一部のデータを格納できない場合、この関数は ERROR_MORE_DATA を返し、  

    lpcbData パラメータが指す変数に、必要なサイズがバイト単位で格納される。この場合、lpData パラメータが指すバッファの内容は未定義

    である。
    lpData パラメータでに NULL を指定し、lpcbData パラメータで NULL 以外の値を指定すると、この関数は ERROR_SUCCESS を返し、

    lpcbData パラメータが指す変数にデータのサイズが格納される。この結果、アプリケーションはレジストリエントリのデータを格納するために最

    適なバッファのサイズを取得できる。
    Window NT:hKey パラメータで HKEY_PERFORMANCE_DATA を指定したときに、lpData パラメータが指すバッファが小さすぎる場

    合、RegQueryValueEx 関数は ERROR_MORE_DATA を返するが、lpcbData パラメータが指す変数には、必要なバッファのサイズが格

    納されない。これは、パフォーマンスデータのサイズが、最初にこの関数を呼び出したときと、次にこの関数を呼び出すときとで変化している

    可能性があるからである。この場合、バッファのサイズを増やし、更新後のサイズを lpcbData パラメータで指定して、もう一度

    RegQueryValueEx 関数を呼び出さなければならない。最適なサイズを事前に把握することはできないので、関数が成功するまで、この

    手順を繰り返す。バッファのサイズを記録するために、もう 1 個変数を用意する必要がある。lpcbData パラメータが指す変数に格納される

    値は、予測できないからである。

戻り値
    関数が成功すると、ERROR_SUCCESS が返る。
    関数が失敗すると、Winerror.h ヘッダーファイル内で定義されている、0 以外のエラーコードが返る。

    FORMAT_MESSAGE_FROM_SYSTEM フラグを指定して FormatMessage 関数を呼び出すと、エラーの一般的な説明を取得できる。