レジストリの値を読み出すには、RegQueryValueEx()関数を使います。
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <string>
#include <windows.h>
/*
レジストリの読出し
*/
int _tmain
(
int argc
, _TCHAR* argv[]
)
{
// std::wcoutのロケールを設定
std::wcout.imbue( std::locale( "", std::locale::ctype ) );
// エラーコード
HRESULT hResult = S_OK;
{
// 戻り値
DWORD dwResult = 0;
// HKEY
HKEY hKey = NULL;
/*
レジストリオープン
*/
dwResult = ::RegOpenKeyEx(
HKEY_LOCAL_MACHINE // レジストリキー
, L"SOFTWARE¥¥Microsoft¥¥Internet Explorer" // レジストリサブキー
, 0 // Reserved(0固定)
, KEY_QUERY_VALUE // アクセス権
, &hKey // キーハンドルの受け取り位置
);
if ( ERROR_SUCCESS != dwResult ) {
// エラー
hResult = ::HRESULT_FROM_WIN32( dwResult );
goto err;
}
// データの読出しバッファ
TCHAR waReadBuf[ MAX_PATH ];
// データの読出しバッファのサイズ(文字数では無くバイト数) / 読みだしたサイズ
DWORD dwReadSize = sizeof( waReadBuf );
// 読みだしたデータのタイプ(RegEnumValue)
DWORD dwType = 0;
/*
レジストリの値を取得
InternetExprolerのバージョン情報
*/
dwResult = ::RegQueryValueEx(
hKey // キーハンドル
, L"svcVersion" // ValueName
, 0
, &dwType
, (LPBYTE)waReadBuf // 読みだし位置
, &dwReadSize // Input: 読み出しバッファサイズ / Output読みだしたサイズ
);
if ( ERROR_SUCCESS != dwResult ) {
// エラー
hResult = ::HRESULT_FROM_WIN32( dwResult );
goto err;
}
/*
読みだした内容の出力
*/
std::wcout << L"読みだした値 = " << waReadBuf << std::endl;
std::wcout << L"読みだしたサイズ = " << dwReadSize << std::endl;
std::wcout << L"読みだしたデータのタイプ = ";
switch( dwType ) {
case REG_BINARY: std::wcout << L"REG_BINARY"; break;
case REG_DWORD: std::wcout << L"REG_DWORD / REG_DWORD_LITTLE_ENDIAN"; break;
case REG_DWORD_BIG_ENDIAN: std::wcout << L"REG_DWORD_BIG_ENDIAN"; break;
case REG_EXPAND_SZ: std::wcout << L"REG_EXPAND_SZ"; break;
case REG_LINK: std::wcout << L"REG_LINK"; break;
case REG_MULTI_SZ: std::wcout << L"REG_MULTI_SZ"; break;
case REG_NONE: std::wcout << L"REG_NONE"; break;
case REG_QWORD: std::wcout << L"REG_QWORD / REG_QWORD_LITTLE_ENDIAN"; break;
case REG_RESOURCE_LIST: std::wcout << L"REG_RESOURCE_LIST"; break;
case REG_SZ: std::wcout << L"REG_SZ"; break;
}
std::wcout << std::endl;
err:
// キーハンドルの破棄
if ( NULL != hKey ) {
::RegCloseKey( hKey );
}
}
// 処理結果を返す
return( 0 );
}
読みだした値 = 11.103.14393.0 読みだしたサイズ = 30 読みだしたデータの型 = REG_SZ