2014-10-28 107 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