Win32 レジストリエントリを列挙する
レジストリエントリを列挙するには、RegEnumValue関数を用いる
RegEnumValue関数のプロトタイプは以下のとおり。
LONG RegEnumValue( HKEY hKey, // 問い合わせ対象のキーのハンドル DWORD dwIndex, // 取得するべきレジストリエントリのインデックス番号 LPTSTR lpValueName, // レジストリエントリ名が格納されるバッファ LPDWORD lpcValueName, // レジストリエントリ名バッファのサイズ LPDWORD lpReserved, // 予約済み LPDWORD lpType, // レジストリエントリのデータのタイプ LPBYTE lpData, // レジストリエントリのデータが格納されるバッファ LPDWORD lpcbData // データバッファのサイズ );
#include <windows.h> #include <stdio.h> int main() { HKEY hKey; TCHAR szValueName[256]; DWORD dwValueNameSize; DWORD dwType; BYTE lpData[256]; DWORD dwDataSize; DWORD i; LONG lRet; LPCTSTR lpszSubkeyName = TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion"); //レジストリキーをオープン lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubkeyName, 0, KEY_QUERY_VALUE, &hKey); if (lRet != ERROR_SUCCESS) { return 1; } i = 0; while (true) { dwValueNameSize = sizeof(szValueName)/sizeof(szValueName[0]); dwDataSize = sizeof(lpData)/sizeof(lpData[0]); //インデックス i に対するレジストリエントリを取得する lRet = RegEnumValue(hKey, i++, szValueName, &dwValueNameSize, NULL, &dwType, lpData, &dwDataSize); if (lRet != ERROR_SUCCESS) { break; } wprintf(L"--------------------------------------------------------\n", szValueName); wprintf(L"Value: %s\n", szValueName); //レジストリエントリのデータ型dwTypeによって適切な表示方法を選択している switch (dwType) { case REG_DWORD: { DWORD n; memcpy(&n, lpData, sizeof(n)); _tprintf(TEXT("Data: %d\n"), n); _tprintf(TEXT("Type: REG_DWORD\n") ); } break; case REG_EXPAND_SZ: { TCHAR lpDst[MAX_PATH]; ExpandEnvironmentStrings((LPCWSTR)lpData, lpDst, sizeof(lpDst)/sizeof(lpDst[0]) ); _tprintf(TEXT("Value: %s\n"), lpDst); _tprintf(TEXT("Type: REG_EXPAND_SZ\n") ); } break; case REG_SZ: _tprintf(TEXT("Data: %s\n"), lpData); _tprintf(TEXT("Type: REG_SZ\n")); break; default: break; } _tprintf(TEXT("\n")); } RegCloseKey(hKey); return 0; }
-------------------------------------------------------- Value: SM_GamesName Data: Games Type: REG_SZ -------------------------------------------------------- Value: SM_ConfigureProgramsName Data: Set Program Access and Defaults Type: REG_SZ -------------------------------------------------------- Value: CommonFilesDir Data: C:\Program Files (x86)\Common Files Type: REG_SZ -------------------------------------------------------- Value: CommonFilesDir (x86) Data: C:\Program Files (x86)\Common Files Type: REG_SZ -------------------------------------------------------- Value: CommonW6432Dir Data: C:\Program Files\Common Files Type: REG_SZ -------------------------------------------------------- Value: DevicePath Value: C:\Windows\inf Type: REG_EXPAND_SZ -------------------------------------------------------- Value: MediaPathUnexpanded Value: C:\Windows\Media Type: REG_EXPAND_SZ -------------------------------------------------------- Value: ProgramFilesDir Data: C:\Program Files (x86) Type: REG_SZ -------------------------------------------------------- Value: ProgramFilesDir (x86) Data: C:\Program Files (x86) Type: REG_SZ -------------------------------------------------------- Value: ProgramFilesPath Value: C:\Program Files (x86) Type: REG_EXPAND_SZ -------------------------------------------------------- Value: ProgramW6432Dir Data: C:\Program Files Type: REG_SZ -------------------------------------------------------- Value: Data: Type: REG_SZ
http://msdn.microsoft.com/ja-jp/library/cc429914.aspx