Jak sprawdzić wersję Windows za pomocą funkcji GetVersionEx

Rookie One

Wrzuć na foremkę przycisk i edit. Wpisz poniższy kod do zdarzenia OnClick przycisku:

procedure TForm1.Button1Click(Sender: TObject);
var
   osInfo : _OSVERSIONINFOA;
   checkOK : LongBool;
begin
     osInfo.dwOSVersionInfoSize := sizeof(OSVERSIONINFO);
     checkOK := GetVersionEx(osInfo);
     if (checkOK) then begin
        case osInfo.dwMajorVersion of
           3 : Edit1.Text := 'Windows NT 3.51 ' + osInfo.szCSDVersion + ' (build ' + intToStr(osInfo.dwBuildNumber) + ')';
           4 : begin
                  case osInfo.dwMinorVersion of
                     0 : if (osInfo.dwPlatformId = VER_PLATFORM_WIN32_NT)
                         then Edit1.Text := 'Windows NT 4.0'
                         else Edit1.Text := 'Windows 95 ';
                     10 : Edit1.Text := 'Windows 98 ';
                     90 : Edit1.Text := 'Windows Me ';
                  end;
                  Edit1.Text := Edit1.Text + osInfo.szCSDVersion
                  + ' (4.' + intToStr(osInfo.dwMinorVersion)
                  + ' build ' + intToStr(osInfo.dwBuildNumber)
                  + ')';
               end;
           5 : begin
                  case osInfo.dwMinorVersion of
                     0 : Edit1.Text := 'Windows 2000 ';
                     1 : Edit1.Text := 'Windows XP ';
                     2 : Edit1.Text := 'Windows Server 2003 ';
                  end;
                  Edit1.Text := Edit1.Text +  osInfo.szCSDVersion
                  + ' (5.' + intToStr(osInfo.dwMinorVersion)
                  + ' build ' + intToStr(osInfo.dwBuildNumber)
                  + ')';
               end;
        end;
     end else showMessage('Błąd przy pobieraniu wersji systemu!');
end;

Wersja systemu pojawi się w edicie.

<DOPISANE>Po niewczasie zauwazylem blad, ktory powodowal, ze Windows NT 4 byl widziany jako 95, ale niezwlocznie go poprawilem. :)</DOPISANE>

FAQ

9 komentarzy

Mój program napisany w języku C (źródła Dev-C++, Open Watcom IDE) do sprawdzania wersji systemu
Windows (od 3.1 do 8). Znajduje się na stronie (w budowie): http://romanworkshop.zz.mu/
w dziale WinAPI/Windows Version Checker.

A tu znajdziesz najświeższą wersje kodu do rozpoznawania wersji os'a Wersja systemu Windows

Aby znaleźć wersję systemu Win Vista, XP (Home / Pro), Win 2000 (może nawet starszych), trzeba wejść do folderu %WINDIR%\system32\eula.txt. W pierwszym wierszu jest wersja systemu, np. dla XP Home:
Microsoft(R) Windows(R) XP Home Edition

jakby komuś by było potrzebne to ja to przetłumaczyłem na c++ :)

int SprawdzWersjeOs()
{
  //delkaracja zmiennych
  _OSVERSIONINFOA osInfo;
  char *Wersja;
  
  osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  switch (osInfo.dwMajorVersion)
  {
    case 3://win 3.1
         Wersja = "Win 3.1";
         break;
         
    case 4://tutaj sprawa się komplikuje
         switch (osInfo.dwMinorVersion)
           {
           case 0:
                if (osInfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
                    Wersja = "Windows NT 4.0";
                else
                    Wersja = "Windows 95";
                break;
           
           case 10:
                Wersja = "Windows 98";
                break;
           
           case 90:
                Wersja = "Windows ME";
                break;

           }
         break;
         
    case 5:
         switch (osInfo.dwMinorVersion)
           {
           case 0:
                Wersja = "Windows 2000";
                break;
                
           case 1:
                Wersja = "Windows XP";
                break;
                
           case 2:
                Wersja = "Windows Server 2003";
                break;
           }
         break;
         
  default:
        Wersja = "Błąd";
        break;      
  }
  MessageBox (0, Wersja, "", MB_OK);
}

Fane...
btw: wlasnie odkrylem za na 4p sa 4 osoby z Ruda Śląskiej, jak przychodzilem to nie bylo zadnego... (no tylko ja)

A jak sprawdzić, czy WinXp jest Home/Pro, Win2k Server/Pro?

Dodam tylko że pod adresem http://4programmers.net/download.php?id=1065 znajduje się komponencik mojego autorstwa :) pobierający informacje o OSku za pomocą tej właśnie funkcji :).

Znalazlem maly blad, ale szybko go poprawilem. :)