Q&A

  • 운영체제 정확한 버전을 알고싶습니다.
게시판을 뒤져서 찾은것은
95 /nt / win32이렇게만 찾아주네요.

버전마다 레지스트리 경로가 틀린것 같아서
결과물이 잘안나오네요

95
98
me
윈2000
중 어떤 버전의 OS를 사용하는지 찾으려면 어떻게 하나요.

레지스트리에 관련해서 좋은 정보가 있는 사이트나 책좀 소개해주세요.
잘 못찾겠네요.
5  COMMENTS
  • Profile
    장태원 2003.08.14 20:56
    쩝 제가 답변한 소스에 들어 잇는데 ㅡㅡ;

    장 20분여간 프로그램 짜서 확인하고 답변 드린건데.

    그것만큼 확인도 안해주시다니..쩝...실망이네요.

    제가 답변한

      FCSDVersion:= os.szCSDVersion;
      FBuildNumber:= os.dwBuildNumber;
      FPlatformID:= os.dwPlatformId;
      FMajorVersion:= os.dwMajorVersion;
      FMinorVersion:= os.dwMinorVersion;

    이부분이었는데... ㅡㅡ; 쩝.


  • Profile
    허진 2003.08.15 00:01
    레지스트리의 폴더값은 어떻게 읽어오나요?


    HKEY_CURRENT_KEY
         - Windows
            - Test
            - TTest   - A:10
                          - B:10

    예로 위와같은 레지스트리 구조라면
    HKEY_CURRENT_KEY/Windows/TTest/A의 값을 읽어와서 변수에
    넣는것은 님소스를 봐서 알겠는데요. 10이라는 값을 읽어오는 것이죠

    그럼 HKEY_CURRENT_KEY/Windows 라는 위치 아래의 값들 목록을 읽어오려면.. 어떻게 해야하나ㅛ.
    Test, TTest이 값들을 알아오려고요.. 몇개가 있을지도 모르고.. 그런상황이거던요.
  • Profile
    허진 2003.08.14 23:42
    제가 초보라서 제대로 이해를 못했을수도 있으니.. 양해를..

    님 소스에서
    s:= 'SOFTWAREMicrosoftWindows';
      if SysUtils.Win32PlatForm = VER_PLATFORM_WIN32_NT then
        s:= s + ' NT';
      s:= s + 'CurrentVersion';

    부분이 운영체제의 버전에 따라 다른 경로의 레지스트리를 찾는 것 같아서
    Win32PlatForm을 봤습니다.
    95 / NT / Win32에 대해서만 나와서

    좀더 정확한 값을 찾고자 했떤 거십니다.

    그리고 제가 잘못해서 그런것 같기는 한데
    변수들에 값이 안들어갑니다..

    메모리에 관련된 것들은 제대로 값이 들어왔는데
    레지스트리에서 읽은 부분들은 값들이 BLANK로 들어와서요.
    그래서 질문드렸던 것입니다.
    기분 많이 상하셨으면 죄송합니다.
    아는게 없으니 알려주셔도 ... 잘 안되나봅니다.
    님 소스를 그냥 퍼서 컴파일한게 아니라 따로 빼서 함수로 써서그런지..
    다시 잘 해보겠습니다.
  • Profile
    허진 2003.08.14 23:58
    // 번거롭게 해놔서 죄송합니다.
    // 메모리 부분은 따로 함수로 빼서 사용했습니다.
    // 아래에 결과값들을 적어놨습니다.
    procedure TfrmMain.ScanPC_GetHwINFO;

    var
      registry : TRegistry;
      s: string;
      sys: TSystemTime;
      os: _OSVERSIONINFOA;
      si: TSystemInfo;
      FCSDVersion,FRegisteredCompany,FProductID,FProductName :String;
      FBuildNumber,FPlatformID,FMajorVersion,FMinorVersion: Cardinal;

    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;
  • Profile
    장태원 2003.08.15 02:06
    좀 번거롭네요..ㅡㅡ;
    FRegistry 를 확인하셧으면 금세 답이 나왔을텐데..쩝.


    Registry.ReadString 를 F 를 붙이면 됩니다.
    요렇게

    FRegistry.ReadString

    ㅡㅡ;

    정리 되시면..팁란에 올려서 울님들과 공유하세요.