プログラムでレジストリを HKEY_LOCAL_MCAHINE から HKEY_CURRENT_USER に移動する方法を知っている人はいますか?
RegEnumKeyEx と RegEnumValue を使用する再帰関数を作成しましたが、RegEnumValue は最上位のキーの下にあるすべての値を返すようです。
たとえば、キーが HKEY_LOCAL_MACHINE\SOFTWARE\MyApp\KeyName1 で、その下に 3 つの値があり、HKEY_LOCAL_MACHINE\SOFTWARE\MyApp\KeyName2 があり、2 つの値があるとします。RegEnumKeyEx が適切なキーを返しているように見えますが、最初のキー (つまり KeyName1) に対して RegEnumValue を呼び出すと、そのキーの下の 3 つだけでなく、5 つの値すべてが返されます。
すべてが理にかなっていることを願っています...私は何か間違ったことをしていますか?
助けてくれてありがとう
役立つ場合は、スニペットを次に示します。
void CArgusApp::RecurseSubKeys(CString csStartKey)
{
CQERegistry reg;
HRESULT hr = reg.Open(HKEY_LOCAL_MACHINE, "SOFTWARE\\" + csStartKey, KEY_QUERY_VALUE );
CStringArray csaDataNames;
reg.GetAllDataNames(csaDataNames);
for (int j = 0; j < csaDataNames.GetSize(); j++)
{
CString csValueName = csaDataNames.ElementAt(j);
TRACE(csStartKey + " - " + csValueName);
}
CStringArray csaKeys;
reg.GetAllSubKeys(csaKeys);
for (int i = 0; i < csaKeys.GetSize(); i++)
{
CString csKey = csaKeys.ElementAt(i);
this->RecurseSubKeys(csStartKey + "\\" + csKey);
}
reg.Close();
}
つまり、上記の GetAllDataNames は単純に RegEnumValue を呼び出し、GetAllSubKeys は RegEnumKeyEx を呼び出します。