|
分類:[C/C++]
レジストリから値を取得できません。 waReadBufに自分(ソースコード)のexeのpathが入っており、if (ERROR_SUCCESS != dwResult)でエラー処理され、 キーハンドル(hKey)の中はnullでした。どこに問題があるのでしょう? よろしくお願いします。
#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 // アクセス権 | KEY_WOW64_64KEY // 64bitレジストリ , &hKey // キーハンドルの受け取り位置 ); if (ERROR_SUCCESS != dwResult) {
// エラー hResult = ::HRESULT_FROM_WIN32(dwResult); }
// データの読出しバッファ TCHAR waReadBuf[MAX_PATH];
// データの読出しバッファのサイズ(文字数では無くバイト数) / 読みだしたサイズ DWORD dwReadSize = sizeof(waReadBuf);
// 読みだしたデータのタイプ(RegEnumValue) DWORD dwType = 0;
/* レジストリの値を取得 InternetExprolerのバージョン情報 */ dwResult = ::RegQueryValueEx( hKey // キーハンドル , L"svcVersion" // ValueName , 0 // Reserved(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); }
|