○レジストリ操作
開く→操作→閉じる が一連の動作です。
REG_OPTION_NON_VOLATILE:不揮発性で開いたり、REG_OPTION_VOLATILE:揮発性で開いたりするのをごちゃ混ぜにすると、どんどん書き換えられてわけわからなくなるので注意が必要です。←あたりまえかw
デバッグの時に揮発性で作ってリリースで不揮発性に変更した時に、レジストリの読み出し部分でふと変更をわすれていると地獄
○レジストリのキーを作成または既存のキーを開く
HKEY hKey;
DWORD dwDisposition;
LONG result;
result = RegCreateKeyEx( HKEY_CURRENT_USER,
//HKEY_CLASSES_ROOT
//HKEY_CURRENT_CONFIG
//HKEY_CURRENT_USER
//HKEY_LOCAL_MACHINE
//HKEY_USERS
//Windows NT/2000:HKEY_PERFORMANCE_DATA も指定できます。
//Windows 95/98:HKEY_DYN_DATA も指定できます。
"Software\\AAAA\\BBBB",//キー
0,//予約
NULL,//指定
REG_OPTION_NON_VOLATILE,//不揮発性
//REG_OPTION_VOLATILE //システムを再起動すると消える揮発性
KEY_ALL_ACCESS,//標準アクセス権)のすべての権利を組み合わせたもの
NULL,
&hKey,
&dwDisposition);
//result が ERROR_SUCCESS であれば成功である.
//キーを閉じる
RegCloseKey(hKey);
○レジストリの値の設定
■文字を書き込む
char data[]="DDDD";
result = RegSetValueEx(
hKey, // 現在オープンしているキーのハンドル
"test", // 値の「名前」が入った文字列へのポインタ
0, // 予約パラメータ。0を指定する
REG_SZ, // 値の「種類」を指定する。NULLで終わる文字列はREG_SZ、32ビット値はREG_DWORD
(CONST BYTE*)(LPCTSTR)data, // 格納する値の「データ」が入ったバッファへのポインタ
(int)sizeof(data) // dataのサイズを指定する
);
■数字を書き込む
int data=100;
result = RegSetValueEx(
hKey, // 現在オープンしているキーのハンドル
"test", // 値の「名前」が入った文字列へのポインタ
0, // 予約パラメータ。0を指定する
REG_DWORD, // 値の「種類」を指定する。NULLで終わる文字列はREG_SZ、32ビット値はREG_DWORD
(CONST BYTE*)&data, // 格納する値の「データ」が入ったバッファへのポインタ
(int)sizeof(data) // dataのサイズを指定する
);
○レジストリの値の取得
■文字の取得
一回サイズを取得してからデータを取得するらしい(ほんとなのかな?
char Data[1024]=""; // 値を受け取る
DWORD dwType; // 値の種類を受け取る
DWORD dwSize; // データのサイズを受け取る
//データのサイズを取得
result = RegQueryValueEx(
hKey, // 現在オープンしているキーのハンドル
"test", // 取得する値の「名前」が入った文字列へのポインタ
NULL, // 予約パラメータ。NULLを指定する
&dwType, // 値の「種類」を受け取る
NULL, // 値の「データ」を受け取る。NULLを指定することも可能だが、データは受け取れない
&dwSize // 終端文字'\0'を含んだDataのサイズを取得する
);
//実際にデータを取得(サイズの指定が正しくないと失敗することがある)
result = RegQueryValueEx(
hKey, // 現在オープンしているキーのハンドル
"test", // 取得する値の「名前」が入った文字列へのポインタ
NULL, // 予約パラメータ。NULLを指定する
&dwType, // 値の「種類」を受け取る
(LPBYTE)(LPCTSTR)&Data, // 値の「データ」を受け取る。NULLを指定することも可能だが、データは受け取れない
&dwSize // Dataのサイズを指定する
);
■値の取得
サイズを受け取るdwSizeのポインタは必要らしいからNULLを指定しないのが吉。
DWORD Data; // "データのポインタアドレスを受け取る
DWORD dwSize=(int)sizeof(Data); // データのサイズ
result = RegQueryValueEx(
hKey, // 現在オープンしているキーのハンドル
"test", // 取得する値の「名前」が入った文字列へのポインタ
NULL, // 予約パラメータ。NULLを指定する
NULL, // 値の「種類」を受け取る
(LPBYTE)&Data, // 値の「データ」を受け取る。NULLを指定することも可能だが、データは受け取れない
&dwSize // Dataのサイズを指定する。
);
▲トップページ
>
Windows と C++