わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。

レジストリの書き込み(64bit)

レジストリに値を書き込むには、RegSetValueEx()関数を使います。WOW64(64bit)のレジストリのデータを書き込むには、 レジストリキーハンドルを取得する際に、RegOpenKeyEx()関数の権限に、KEY_WOW64_64KEYを付加してキーハンドルを取得します。

#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <string>
#include <windows.h>



/*
	レジストリの書き込み(64bit)

		WOW64 の影響を受けるレジストリ キー 
			https://msdn.microsoft.com/ja-jp/library/aa384253(v=vs.85).aspx
*/
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¥¥TestApplication"	// レジストリサブキー
				, 0								// Reserved(0固定)
				, KEY_SET_VALUE					// アクセス権
				| KEY_WOW64_64KEY				// 64bit(WOW64)
				, &hKey							// キーハンドルの受け取り位置
			);
		if ( ERROR_SUCCESS != dwResult ) {

			// エラー
			hResult = ::HRESULT_FROM_WIN32( dwResult );
			goto err;
		}


		/*
			レジストリに値を書き込み
		*/
		{
			std::wstring strWriteValue = L"Test Value String";

			dwResult = ::RegSetValueEx(
					  hKey									// キーハンドル
					, L"TestVersion"						// ValueName
					, 0										// Reserved(0固定)
					, REG_SZ								// データ型
					, (LPBYTE)strWriteValue.c_str()			// 書き込み内容
					, strWriteValue.size() * sizeof(TCHAR)	// 書き込みサイズ(BYTE)
				);
			if ( ERROR_SUCCESS != dwResult ) {

				// エラー
				hResult = ::HRESULT_FROM_WIN32( dwResult );
				goto err;
			}
		}

		std::wcout << L"書き込みました。" << std::endl;

err:
		// キーハンドルの破棄
		if ( NULL != hKey ) {
			::RegCloseKey( hKey );
		}
	}

	// 処理結果を返す
	return( 0 );
}



実行結果

書き込みました。






わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。