SHRegEnumUSValue ユーザ指定キーのレジストリ値の列挙

Cの宣言:

LONG SHRegEnumUSValue(
	HUSKEY hUSKey,
	DWORD Index,
	LPSTR ValueName,
	LPDWORD ValueNameSize,
	LPDWORD ValueType,
	LPVOID Value,
	LPDWORD ValueSize,
	SHREGENUM_FLAGS Flags);

説明:

hUSKeyで指定したユーザ指定キーにあるレジストリ値を列挙する。

引数の意味は以下の通り。
hUSKey (IN) 列挙するユーザ指定キーのハンドル。
Index (IN) hUSKeyで指定したキーにある何番目のレジストリ値を取得するかを指定するインデックス。
ValueName (OUT) 取得結果のレジストリ値の名前。
ValueNameSize (IN/OUT) ValueNameのサイズ。関数の実行後、ValueNameに実際に設定されたデータのサイズが返される。
ValueType (OUT) 取得結果のレジストリ値のタイプ。
Value (OUT) 取得結果のレジストリ値。NULLを指定可能。
ValueSize (IN/OUT) Valueのサイズ。関数の実行後、Valueに実際に設定されたデータのサイズが返される。
Flags (IN) HKEY_CURRENT_USERとHKEY_LOCAL_MACHINEのどちらのキーを列挙するかを指定するフラグ。SHRegEnumUSKeyを参照。

戻り値は、関数の実行結果を表すエラーコードである。

Cのサンプル:

SHRegEnumUSValueを使用して、HKEY_LOCAL_MACHINEにある"Software\masapico"というレジストリキーのレジストリ値を列挙し、各々のレジストリ値の名前と値を表示する。
void EnumUSValue(void)
{
	HUSKEY hUSKey;
	LONG lResult;
	DWORD Index;
	char ValueName[1000];
	DWORD ValueNameSize;
	DWORD ValueType;
	char Value[1000];
	DWORD ValueSize;
	
	/* "Software\masapico"をオープン */
	SHRegOpenUSKey(
		"Software\\masapico",
		KEY_ALL_ACCESS,
		NULL,
		&hUSKey,
		TRUE);

	/* レジストリ値を列挙 */
	for(Index = 0;; Index++) {
		ValueNameSize = 1000;
		ValueSize = 1000;

		lResult = SHRegEnumUSValue(
			hUSKey,
			Index,
			ValueName,
			&ValueNameSize,
			&ValueType,
			&Value,
			&ValueSize,
			SHREGENUM_HKLM);

		if(lResult != ERROR_SUCCESS) break;

		/* 取得結果を表示 */
		if(ValueType == REG_SZ) printf("%s: %s\n", ValueName, Value);
		else printf("%s: (...)\n", ValueName);
	}

	/* 終了 */
	SHRegCloseUSKey(hUSKey);
}
(original text:1999/09/05 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。