質問
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();
}
i.e。上記のGetAllDataNamesはRegEnumValueを呼び出し、GetAllSubKeysはRegEnumKeyExを呼び出します。
解決
すべてのレジストリ機能を調べてみたところ、SHCopyKeyまたはこれを使用できます:Vista以降のRegCopyTree。
助けてくれてありがとう。
他のヒント
私はこれに関する専門家ではありませんが、このようなことを試してください。
RegistryKey myKey = Registry.LocalMachine.OpenSubKey(
@"SOFTWARE\\" + csStartKey,
false);
Registry.CurrentUser.CreateSubKey
(myKey.ToString());
所属していません StackOverflow