当我不知道字段的全名时如何编辑注册表值?

How to edit registry value when I dont know full name of a field?

屏幕截图上是我正在处理的基本上我知道在我的游戏启动之前不知道名称的第二部分,因为它是根据监视器 ID 或其他东西随机生成的。

  1. 我想通过部分名称检查密钥是否存在
  2. 如果找到就获取全名
  3. 设置我的价值

目前我正在使用它,但我认为这样做根本不可能。

RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\AAA\MyApp\test\", false);

if (key != null)
{
    return (string)key.GetValue("Screenmanager Resolution ....");
}
else
{
    return null;
}

然后我想自己设置值

key.SetValue("Screenmanager Resolution Width_h182942802", 1024, RegistryValueKind.DWord);

可以通过GetValueNames()获取值名称,然后查看"Screen Resolution *"值是否存在:

string[] valueNames = key.GetValueNames();
string valueName = valueNames.FirstOrDefault(s => s.StartsWith("Screenmanager Resolution Width_"));
if(valueName != null)
{
    return key.GetValue(valueName);
}

或没有 LINQ:

foreach(string valueName in key.GetValueNames())
{
    if(valueName.StartsWith("Screenmanager Resolution Width_"))
        return key.GetValue(valueName);
}
return null;