0
Microsoft.Win32.RegistryKey registryPath = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Testing");

Microsoft.Win32.RegistryKey entryKey = registryPath.OpenSubKey("Entry Point");

テストには、「エントリ ポイント 011」、「エントリ ポイント 123」という形式のキーがたくさんあるので、エントリ ポイントの後に乱数が続きます。

上記の registryPath 変数を検索して、「エントリ ポイント」キーワードを含むキーの数を取得できますか? このキーワードなしで存在する他のキーもあると仮定します。

現時点では、for ループを使用し、すべての可能な組み合わせをループしてすべてのキーの数を取得し、キーが存在するかどうかを確認していますが、for ループを持つ "Entry Point 9000" ほどのキーがあるためです。 9000回実行するのは非常に非効率的です。

 for (int i = 0; i <= highestEntryPointValue; i++)
 {
     Microsoft.Win32.RegistryKey entryKey = steamApps64.OpenSubKey("Entry Point " + Convert.ToString(i));

     if (entryKey != null)
     {
         count++;
     }
 }
4

2 に答える 2

2

この例は (たとえば) 9000 までカウントするため効率的ではありませんが、キーが EntryPoint 011、EntryPoint 123、EntryPoint 9000 の 3 つしかない場合はどうでしょうか。

一行の答え

int count = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Testing").GetSubKeyNames().Where(s => s.StartsWith("EntryPoint")).Count();
于 2012-04-04T15:29:17.233 に答える
1

Microsoft.Win32.RegistryKey には、名前を含む文字列の配列を返す GetSubKeyNames() というメソッドがあります。

string[] keys = registryPath.GetSubKeyNames();

これらのキーをループして、レジストリを無駄に開かずに名前を確認できるようになりました

var subKeys = Array.FindAll(keys, key => key.Substring(0, 11) == "Entry Point"));
int count = subKeys.Lenght;
foreach(string s in subKeys)
.....
于 2012-04-04T15:31:46.293 に答える