LONG RegQueryMultipleValues( HKEY hKey, PVALENT Values, DWORD ValueNum, LPTSTR Buf, LPDWORD BufSize);
この関数はNT3.5以降または95で使用可能な、advapi32.dllで実装される関数である。
取得する値の一覧の指定は、VALENT型の配列によって行う。各VALENT型データのve_valuenameデータメンバに、取得する値の名前を指すポインタをあらかじめ設定してRegQueryMultipleValuesを呼ぶと、ve_valueptrメンバなどに、取得結果の値に関する情報が取得される。取得結果の値はBufで示されるデータ領域に書き込まれ、VALENT型のデータメンバであるve_valueptrは、Bufで指定したバッファ内を指すように設定される。
ve_valuenameに設定する名前には、“\”を含んではならない。
RegQueryMultipleValuesは、返されるデータの合計が1Mバイト以上となるようなデータの取得を行うことはできない。
引数の意味は、以下の通り。
hKey | (IN) | 値の取得元のレジストリキーを示すハンドル |
Values | (I/O) | 取得する値の名前を指定するVALENT型の配列。関数の実行後、各々の値の型、値、長さなどが設定される。 |
ValueNum | (IN) | Valuesで指定した配列の要素の数。 |
Buf | (OUT) | Valuesで指定したVALENT型配列の要素のデータメンバであるve_valueptrが示す先として使用される、呼び出し元が用意するバッファ。NULLを指定した場合、BufSizeに必要なバッファのサイズが返される。 |
BufSize | (I/O) | Bufのサイズ。関数の実行後、Bufに書き込まれたデータのバイト数が設定される。BufSizeの入力値が小さすぎた場合、必要なバッファのサイズが返される。 |
関数の実行に成功した場合、ERROR_SUCCESSが返される。失敗した場合、エラーコードが返される。
void DispMouseInfo() { HKEY hKey; VALENT Values[3]; char Buf[1000]; DWORD BufSize; int i; /* バッファの初期化 */ BufSize = 1000; Values[0].ve_valuename = "DoubleClickSpeed"; Values[1].ve_valuename = "MouseSpeed"; Values[2].ve_valuename = "SwapMouseButtons"; /* レジストリのオープン */ RegOpenKeyEx(HKEY_CURRENT_USER, "Control Panel\\Mouse", 0, KEY_QUERY_VALUE, &hKey); /* 値の取得 */ RegQueryMultipleValues(hKey, Values, 3, Buf, &BufSize); /* 値の表示 */ for(i=0; i<3; i++) printf("%s: %s\n", Values[i].ve_valuename, Values[i].ve_valueptr); /* 後処理 */ RegCloseKey(hKey); }