RegEnumKeyEx(A)

指定されたレジストリキーのサブキーを列挙します。この関数は、呼び出されるたびに、1つのサブキーに関する情報を取得します。

LONG RegEnumKeyExA(
    HKEY      hKey,        // キーのハンドル
    DWORD     dwIndex,     // サブキーのインデックス
    PTSTR     pName,       // サブキー名を格納するバッファ
    PDWORD    pcbName,     // pName のサイズを入れた変数
    PDWORD    pReserved,   // 予約(NULLを指定)
    PTSTR     pClass,      // クラス名を格納するバッファ
    PDWORD    pcbClass,    // pClass のサイズを入れた変数
    PFILETIME pftLastWrite // 最終書き込み時間
);

ADVAPI32.DLL

引数

hKey

現在オープンされているキーのハンドルを指定します。このハンドルは KEY_ENUMERATE_SUB_KEYS アクセスを持っていなければなりません。

次の定義済みキーを指定することもできます。

定義済みキー
0x80000000 HKEY_CLASSES_ROOT
0x80000001 HKEY_CURRENT_USER
0x80000002 HKEY_LOCAL_MACHINE
0x80000003 HKEY_USERS
0x80000004 Windows NT/2000/XP: HKEY_PERFORMANCE_DATA
0x80000005 HKEY_CURRENT_CONFIG
0x80000006 Windows 95/98/Me: HKEY_DYN_DATA
dwIndex

取得するサブキーの 0 から始まるインデックスを指定します。

pName

サブキーの名前を格納するためのバッファのアドレスを指定します。この関数は、サブキーの名前だけをコピーします。階層全体を含めた名前をコピーするわけではありません。

pcbName

pName パラメータで表されるバッファのバイト数(Unicode 版の場合は文字数)単位のサイズを格納した変数のアドレスを指定します。関数が制御を返すと、 pName パラメータのバッファにコピーされた文字列のバイト数(Unicode 版の場合は文字数)がこの変数に格納されます。

pReserved

予約されています。 0 (NULL) を指定しなければなりません。

pClass

サブキーのクラス名を格納するバッファのアドレスを指定します。この情報が不要の場合は 0 (NULL) を指定することができます。現在はどのようなクラスも定義されていないため、アプリケーションはこのパラメータを無視するべきです。

pcbClass

pClass パラメータで表されるバッファのバイト数(Unicode 版の場合は文字数)単位のサイズを格納した変数のアドレスを指定します。関数が制御を返すと、 pClass パラメータのバッファにコピーされたサイズがこの変数に格納されます。 pClass パラメータに 0 (NULL) を指定した場合は、このパラメータに 0 (NULL) を指定することができます。

pftLastWrite

サブキーの最終書き込み時間を格納するための FILETIME 構造体のアドレスを指定します。

戻り値

成功すると 0 (ERROR_SUCCESS) が返ります。

失敗すると 0 以外のエラーコードが返ります。このエラーコードと FORMAT_MESSAGE_FROM_SYSTEM フラグを指定して FormatMessage 関数を呼び出すことで、エラーメッセージを取得できます。

解説

サブキーを列挙するには、まず dwIndex パラメータに 0 を指定してから RegEnumKeyEx 関数を呼び出します。以後、 dwIndex パラメータをインクリメント(1ずつ加算)しながら RegEnumKeyEx 関数を呼び出します。この操作を、すべてのサブキーが列挙されるまで(RegEnumKeyEx 関数が戻り値 259 (ERROR_NO_MORE_ITEMS) を返すまで)繰り返します。

逆に、最初の関数呼び出し時に dwIndex パラメータに最後のサブキーのインデックスを指定し、インデックスが 0 になるまで dwIndex パラメータをデクリメント(1ずつ減算)しながら関数を呼び出していくこともできます。このとき、最後のサブキーのインデックスを取得するには RegQueryInfoKey 関数を使います。

指定されたレジストリキーが持つサブキーで最も長いサブキーの名前やクラスの名前の長さを取得するには RegQueryInfoKey 関数を使います。

対応情報

Windows 95 以降 / Windows NT 3.1 以降