Win32API レジストリにキーを作成する RegCreateKeyEx

レジストリキーを作成するには、RegCreateKeyEx関数を用いる。
RegCreateKeyEx関数は、レジストリキーが存在しなければ作成し、既に存在していればレジストリキーをオープンする


RegCreateKeyEx関数のプロトタイプは、以下のとおり。

LONG RegCreateKeyEx(
  HKEY hKey,                                  // 開くべきキーのハンドル
  LPCTSTR lpSubKey,                           // サブキーの名前
  DWORD Reserved,                             // 予約済み
  LPTSTR lpClass,                             // クラスの文字列
  DWORD dwOptions,                            // 特別なオプション
  REGSAM samDesired,                          // 希望のセキュリティアクセス権
  LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 継承の指定
  PHKEY phkResult,                            // キーのハンドル
  LPDWORD lpdwDisposition    // 既存かどうかを示す値が格納される変数
);


以下の例では、HKEY_CURRENT_USERの直下に「test」というキーを作成(既に存在していればオープン)し、すぐにRegCloseKeyでレジストリキーのハンドルをクローズする。RegCreateKeyEx関数を実行後、dwDispositionがREG_CREATED_NEW_KEYであれば、キーが新規作成されたことを示す。また、dwDispositionがREG_OPENED_EXISTING_KEYであれば、キーは既に存在しており、そのキーをオープンしたことを示す。

#include <windows.h>
#include <stdio.h>

int main()
{
    HKEY hKey;
    LONG lRet;
    DWORD dwDisposition;

    lRet = RegCreateKeyEx(HKEY_CURRENT_USER, 
                            TEXT("test"), 
                            0, 
                            NULL, 
                            REG_OPTION_NON_VOLATILE, 
                            KEY_CREATE_SUB_KEY|KEY_SET_VALUE,
                            NULL,
                            &hKey,
                            &dwDisposition);

    if (lRet != ERROR_SUCCESS) {
        return 1;
    }

    if (dwDisposition == REG_CREATED_NEW_KEY) {
        puts("Because the key did not exist, has been newly created.");
    } else if (dwDisposition == REG_OPENED_EXISTING_KEY) {
        puts("Key exists, and that was simply to open the key.");
    }
    
    RegCloseKey(hKey);

    return 0;
}




  • 参考

  • http://msdn.microsoft.com/ja-jp/library/cc429904.aspx