님 소스에서
s:= 'SOFTWAREMicrosoftWindows';
if SysUtils.Win32PlatForm = VER_PLATFORM_WIN32_NT then
s:= s + ' NT';
s:= s + 'CurrentVersion';
부분이 운영체제의 버전에 따라 다른 경로의 레지스트리를 찾는 것 같아서
Win32PlatForm을 봤습니다.
95 / NT / Win32에 대해서만 나와서
좀더 정확한 값을 찾고자 했떤 거십니다.
그리고 제가 잘못해서 그런것 같기는 한데
변수들에 값이 안들어갑니다..
메모리에 관련된 것들은 제대로 값이 들어왔는데
레지스트리에서 읽은 부분들은 값들이 BLANK로 들어와서요.
그래서 질문드렸던 것입니다.
기분 많이 상하셨으면 죄송합니다.
아는게 없으니 알려주셔도 ... 잘 안되나봅니다.
님 소스를 그냥 퍼서 컴파일한게 아니라 따로 빼서 함수로 써서그런지..
다시 잘 해보겠습니다.
begin
s:= 'SOFTWAREMicrosoftWindows';
if SysUtils.Win32PlatForm = VER_PLATFORM_WIN32_NT then
s:= s + ' NT';
s:= s + 'CurrentVersion';
OpenRegistry(true);
SetRegistryRootKey(HKEY_LOCAL_MACHINE);
if OpenRegistrySubKey(s) then
begin
FRegisteredOwner:= Registry.ReadString('RegisteredOwner');
FRegisteredCompany:= Registry.ReadString('RegisteredOrganization');
FProductID:= Registry.ReadString('ProductID');
FProductName:= Registry.ReadString('ProductName');
CloseRegistrySubKey;
end;
ShowMessage(FRegisteredOwner); //공백(아무값도 안넘어왔음)
ShowMessage(FRegisteredCompany); //공백(아무값도 안넘어왔음)
ShowMessage(FProductID); //공백(아무값도 안넘어왔음)
ShowMessage(FProductName); //공백(아무값도 안넘어왔음)
os.dwOSVersionInfoSize:= SizeOf(os);
GetVersionEx(os);
FCSDVersion:= os.szCSDVersion;
FBuildNumber:= os.dwBuildNumber;
FPlatformID:= os.dwPlatformId;
FMajorVersion:= os.dwMajorVersion;
FMinorVersion:= os.dwMinorVersion;
ShowMessage(FCSDVersion); // Service Pack3
ShowMessage(inttostr(FBuildNumber)); //2195
ShowMessage(inttostr(FPlatformID)); //2
ShowMessage(inttostr(FMajorVersion)); //5
ShowMessage(inttostr(FMinorVersion)); //0
//위 정보로 받은 값입니다. 정확한 운영체제의 명칭을 알수가 없어서요.
// FPlatformID가 2이면 2000이라는 소리인지 확실히 모르겠어서 운영체제에 대한 질문을 드렸었습니다.
// 하나 더 질문을 드리고 싶은게 내컴퓨터에서 등록정보 누르면 나오는 내용이
// 위에 공백으로 나온 자료의 정보가 맞는지요..
end;
procedure TfrmMain.OpenRegistry(aReadOnly: Boolean);
begin
if not Assigned(FRegistry) then
FRegistry:= TRegistry.Create;
end;
procedure TfrmMain.SetRegistryRootKey(aRootKey: HKEY);
begin
if not Assigned(FRegistry) then exit;
FRegistry.RootKey:= aRootKey;
end;
function TfrmMain.OpenRegistrySubKey(const aSubKey: string): Boolean;
begin
Result:= false;
if not Assigned(FRegistry) then exit;
Result:= FRegistry.OpenKey(aSubKey, false);
end;
procedure TfrmMain.CloseRegistrySubKey;
begin
if not Assigned(FRegistry) then exit;
FRegistry.CloseKey;
end;
장 20분여간 프로그램 짜서 확인하고 답변 드린건데.
그것만큼 확인도 안해주시다니..쩝...실망이네요.
제가 답변한
FCSDVersion:= os.szCSDVersion;
FBuildNumber:= os.dwBuildNumber;
FPlatformID:= os.dwPlatformId;
FMajorVersion:= os.dwMajorVersion;
FMinorVersion:= os.dwMinorVersion;
이부분이었는데... ㅡㅡ; 쩝.