당신의 코드가 오히려 이상하다. 변수 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()
을 부르십시오.
어떻게 작동하지 않습니까? –
key.GetSubKeyNames() 및 key.GetValueNames() listview를 추가하십시오. – Gabee8