2014-10-28 2 views
0

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 \ 소프트웨어 \ 마이크로 소프트 \ 윈도우 \ CurrentVersion \ 실행 및 HKEY_LOCAL_MACHINE \ 소프트웨어 \ 마이크로 소프트 \ 윈도우 \ CurrentVersion \ 실행

+0

어떻게 작동하지 않습니까? –

+0

key.GetSubKeyNames() 및 key.GetValueNames() listview를 추가하십시오. – Gabee8

답변

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

키가 아닌 값을 열거하고 있으므로 열 머리글 제목이 올바르지 않습니다. –

+0

@David Heffernan이 (가) 귀하의 의견에 감사드립니다. 열 제목을 수정했습니다. –

0

당신의 코드가 오히려 이상하다. 변수 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 비트 컴퓨터에서 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

+0

레지스트리 리디렉터의 문제점을 알고 있습니까? 당신이이 일로 귀찮아하는 것 같지 않습니다. –

관련 문제