にそこには再帰が実際にありません。このコードは、HKLMの下でキーを開き、すべてのサブキーを列挙し、特定の名前付き値を探します。概要では、あなたのCコードは、これらのWin32 API呼び出しから作成されます。
HKEY hRegAdapters;
LONG res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AdapterKey, 0,
KEY_READ, &hRegAdapters);
// error checking by testing res omitted
今、あなたが鍵を開けていることをあなたがサブキー列挙することができます:今、あなたはの名前を持っていることを
for (DWORD Index=0; ; Index++)
{
char SubKeyName[255];
DWORD cName = 255;
LONG res = RegEnumKeyEx(hRegAdapters, Index, SubKeyName, &cName,
NULL, NULL, NULL, NULL);
if (res != ERROR_SUCCESS)
break;
// do something with Name
}
を各サブ鍵は、あなたがRegGetValue
で値を読み取ることができます。
char Value[64];
DWORD cbData = 64;
LONG res = RegGetValue(hSubKey, SubKeyName, "ComponentId",
RRF_RT_REG_SZ, NULL, Value, &cbData);
// check for errors now before using Value
RegGetValue
はVistaで追加の便利な機能です。 XP上でコードを実行する必要がある場合は、代わりにRegQueryValueEx
に電話する必要があります。まずサブキー"ComponentId"
を開きます。
すべてのエラーチェックを省略し、Unicodeの問題を無視してANSI APIを呼び出したことに注意してください。私はあなたにすべての詳細を残します。
完了したらRegCloseKey(hRegAdapters)
に電話することを忘れないでください。
レジストリへのアクセス方法の詳細については、MSDN documentationを参照してください。
再帰はどこですか? RegEnumKeyExの単純なケースのように見えます。 –
行4:foreach(keyNamesの文字列x) – liamzebedee
これは再帰ではありません。これは文字列配列のループです。 Cでは、RegEnumKeyExと呼ばれるwhileループがあります。前にapiプログラミングに勝ったことはありますか? –