[英]How to get registry keys and values in listview
如何在ListView中获取所有注册表字符串和值?
例:
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
for (int i = 0; i < key.ValueCount; i++)
{
string[] arr2 = { key.GetSubKeyNames(), "" };
ListViewItem item = new ListViewItem(arr2);
listView1.Items.Add(item);
}
注册表位置: HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run
和
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
listView1.View = View.Details;
listView1.Columns.Add("Name", 150);
listView1.Columns.Add("Data", 300);
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
foreach (string keyName in key.GetValueNames())
{
listView1.Items.Add(
new ListViewItem(
new string[] { keyName, key.GetValue(keyName).ToString() }
)
);
}
您的代码很奇怪。 您使用变量i
运行一个for
循环,但是永远不要在循环内引用该变量。 那肯定是个错误。 假设您想从键中读取值,可以这样编写:
foreach (string name in key.GetValueNames())
{
string value = key.GetValue(name).ToString();
ListViewItem item = new ListViewItem( new string[] { name, value } );
listView1.Items.Add(item);
}
要注意的另一件事是注册表重定向器。 如果您的进程是32位的,那么您的代码将从注册表的32位视图中读取。 当您在regedit中查看注册表时,这会使您感到困惑。 使用RegistryView
枚举可同时访问32位和64位视图。
因此,在64位计算机上,要枚举HKLM的32位视图和64位视图,则需要这样编写:
private void AddValuesToList(RegistryKey key)
{
foreach (string name in key.GetValueNames())
{
string value = key.GetValue(name).ToString();
ListViewItem item = new ListViewItem(new string[] { name, value });
listView1.Items.Add(item);
}
}
您会这样称呼:
const string keyName = @"Software\Microsoft\Windows\CurrentVersion\Run";
AddValuesToList(Registry.CurrentUser.OpenSubKey(keyName));
AddValuesToList(RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
RegistryView.Registry32).OpenSubKey(keyName));
AddValuesToList(RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
RegistryView.Registry64).OpenSubKey(keyName));
一旦知道如何处理值,就很容易支持子键。 调用key.GetSubKeyNames()
来获取它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.