안녕하세요.
제가 지금 컴퓨터에 설치되어 있는 하드웨어에 관한 정보를 필요로 해서 레지스트리 값을 참조하여 그 값을 읽어오려 하고 있습니다.
그것에 관한 정보는 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI'에 나와있는 것으로 알고 있습니다. 'PCI'의 밑에 있는 서브 키의 폴더 명을 읽어오려고 다음과 같이 프로그램을 구현해보았습니다. 폴더의 이름을 가지고 오는 'GetKeyNames' 이라는 함수를 이용하여 구현을 하였습니다.
구현한 소스는 다음과 같습니다.
procedure TForm1.Button1Click(Sender: TObject);
var
SubKeys: TStringList;
KeyName: String;
i: integer;
begin
KeyName := 'System\CurrentControlSet';
with TRegistry.Create do
begin
RootKey := HKEY_LOCAL_MACHINE;
OpenKey(KeyName, False);
SubKeys := TStringList.Create;
GetKeyNames(SubKeys);
if SubKeys.Count > 0 then
begin
for i:=0 to SubKeys.Count - 1 do
ListBox1.Items.Add(SubKeys[i]);
end
else ShowMessage('key 가 존재하지 않습니다');
SubKeys.Free;
CloseKey;
Free;
end;
end;
위의 소스는 리스트 박스에 서브키 폴더의 리스트를 잘 보여줍니다.
문제는 지금부터인데 'KeyName := 'System\CurrentControlSet';'의 부분을 'KeyName := 'System\CurrentControlSet\Enum';으로 바꾸고 프로그램을 실행시키면 아무런 값을 가지고 오지 못하더군요. 물론 ' KeyName := 'System\CurrentControlSet\Enum\PCI';으로 해도 아무런 값을 가지고 오지 못하고요.
무엇이 잘못된 것인지를 꼭 좀 지적해주십시요.
부탁드리겠습니다. 이 부분의 값이 정말 필요하거든요.
지금 저의 생각은 혹시 'Enum'부분부터 그 밑의 값을 가져오는 방법이 따로 있을까? 하는 생각이거든요. 확실하지는 않고 그냥 추측일뿐입니다.
그래서 찾은 것이 윈도우 API인 'RegEnumKeyEx'라는 것에 관해서 연구중인데 인자를 어떻게 넣어야 할지가 문제가 되고 있습니다.
이 문제를 어떻게 해결할 수 있을까요? 꼭 좀 부탁드리겠습니다.
긴 글 읽어주셔서 감사합니다. 그럼 기다리고 있겠습니다.
보안때문인지 사용자가 함부로 건들면 안되서 그런건지
OpenKeyReadOnly로 열어야합니다.