我在注册表中有类似的东西:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MyKeys\Keys1
> random subkey 1 / value a = 1
> random subkey 2 / value b = 2
> random subkey 3 / value c = 3
> random subkey 4 / value d = 4
随机子密钥x - 随机数(例如{6E7EE186-9G13-50HC-A001-319DA68183A7})
现在我想将所有子键名保存到string []然后将每个值添加到listView:
a | 1
b | 2
c | 3
d | 4
有人可以帮我这个吗?
答案 0 :(得分:3)
此代码是从特定键
中检索子键+值的示例 class Key
{
public string KeyName { get; set; }
public List<KeyValuePair<string, object>> Values { get; set; }
}
private List<Key> GetSubkeysValue(string path, RegistryHive hive)
{
var result = new List<Key>();
using (var hiveKey = RegistryKey.OpenBaseKey(hive, RegistryView.Default))
using (var key = hiveKey.OpenSubKey(path))
{
var subkeys = key.GetSubKeyNames();
foreach (var subkey in subkeys)
{
var values = GetKeyValue(hiveKey, subkey);
result.Add(values);
}
}
return result;
}
private Key GetKeyValue(RegistryKey hive, string keyName)
{
var result = new Key() {KeyName = keyName};
using (var key = hive.OpenSubKey(keyName))
{
foreach (var valueName in key.GetValueNames())
{
var val = key.GetValue(valueName);
var pair = new KeyValuePair<string, object>(valueName, val);
result.Values.Add(pair);
}
}
return result;
}
使用您的根路径调用GetKeyValue
(问题中为SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ MyKeys \ Keys1)
和本地机器配置单元
备注强>:
有些情况OpenSubKey
返回null
,在我的示例中,这些情况会抛出NullRefrenceException =&gt;您应该决定OpenSubKey
返回null
您的路径位于local_machine - 软件中,请确保您使用正确的RegistryView
答案 1 :(得分:1)
接受的答案对我不起作用,我必须进行修改。
public class RegistryFuncs
{
public static List<Key> GetSubkeysValue(string path, RegistryHive hive)
{
var result = new List<Key>();
using (var hiveKey = RegistryKey.OpenBaseKey(hive, RegistryView.Default))
using (var key = hiveKey.OpenSubKey(path))
{
var subkeys = key.GetSubKeyNames();
foreach (var subkey in subkeys)
{
var values = GetKeyValue(hiveKey, path, subkey);
result.Add(values);
}
}
return result;
}
public static Key GetKeyValue(RegistryKey hive, string path, string keyName)
{
var result = new Key() { KeyName = keyName };
var subkey = $@"{path}\{keyName}";
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(subkey))
{
if (key == null) return null;
foreach (var valueName in key.GetValueNames())
{
var val = key.GetValue(valueName);
var pair = new KeyValuePair<string, object>(valueName, val);
result.Values.Add(pair);
}
}
return result;
}
}
public class Key
{
public string KeyName { get; set; }
public List<KeyValuePair<string, object>> Values { get; set; }
public Key()
{
Values = new List<KeyValuePair<string, object>>();
}
}