繁体   English   中英

如何在列表视图中获取注册表项和值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM