2014-10-28 73 views
0

如何在列表视图中获取所有注册表字符串和值? 例子:如何在列表视图中获取注册表项和值

 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 \微软\的Windows \ CurrentVersion \ Run中 和HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \ Run中

+0

什么不行? – 2014-10-28 12:22:09

+0

添加key.GetSubKeyNames()和key.GetValueNames()listview。 – Gabee8 2014-10-28 12:29:25

回答

1
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() } 
     ) 
    ); 
} 
+0

您正在枚举值而不是键,所以您的列标题标题不正确 – 2014-10-28 12:41:45

+0

@David Heffernan感谢您的评论。我编辑了列标题 – 2014-10-28 12:47:48

0

你的代码是相当奇怪的。你运行一个for循环,变量为i,但是不要在循环内引用该变量。那肯定是一个错误。假设你想读一个关键值,你会写这样的:

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位视图读取。当你在注册表中查看注册表时,这会混淆你。使用RegistryView枚举可以同时访问32位和64位视图。

所以,在64位计算机上,列举32位和64位的看法,供HKLM,你需要把它写这样的:

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()以获取它们。

+0

谢谢你的回答! – Gabee8 2014-10-28 13:09:45

+0

你是否理解注册表重定向程序的问题?这似乎并不令你感到困扰。 – 2014-10-28 13:10:59