2

プログラムでレジストリを 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 を呼び出します。

4

2 に答える 2

3

すべてのレジストリ関数を調べたところ、次のことがわかりました: SHCopyKey またはこれを使用できます: RegCopyTree for Vista 以降。

助けてくれてありがとう。

于 2009-10-26T22:06:26.163 に答える
0

私はこれの専門家ではありませんが、このようなことを試してみてください。

  RegistryKey myKey = Registry.LocalMachine.OpenSubKey(
  @"SOFTWARE\\" + csStartKey, 
  false);
Registry.CurrentUser.CreateSubKey
        (myKey.ToString());
于 2009-10-26T21:40:43.613 に答える