2012-05-11 13 views
5

Używam tego kodu do wykrywania wersji Windows na komputerze.Windows 8 Podgląd klienta Nieodpowiednia główna wersja?

function GetOS: string; 
var 
osVerInfo: TOSVersionInfo; 
majorVer, minorVer: Integer; 
begin 
Result := 'Unknown'; 
osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); 
if GetVersionEx(osVerInfo) then 
begin 
    majorVer := osVerInfo.dwMajorVersion; 
    minorVer := osVerInfo.dwMinorVersion; 
    case osVerInfo.dwPlatformId of 
    VER_PLATFORM_WIN32_NT: {Mirosoft Windows NT/2000 } 
    begin 
     if majorVer <= 4 then 
     Result := 'Win NT' 
     else if (majorVer = 5) and (minorVer = 0) then 
     Result := 'Win 2k' 
     else if (majorVer = 5) and (minorVer = 1) then 
     Result := 'Win XP' 
     else if (majorVer = 6) and (minorVer = 0) then 
     Result := 'Win Vista' 
     else if (majorVer = 6) and (minorVer = 1) then 
     Result := 'Win 7' 
     else if (majorVer = 6) and (minorVer = 2) then 
     Result := 'Win 8' 
    end; 
    VER_PLATFORM_WIN32_WINDOWS: { Windows 9x/ME } 
    begin 
     if (majorVer = 4) and (minorVer = 0) then 
     Result := 'Win 95' 
     else if (majorVer = 4) and (minorVer = 10) then 
     begin 
     if osVerInfo.szCSDVersion[1] = 'A' then 
      Result := 'Win 98SE' 
     else 
      Result := 'Win 98'; 
     end 
     else if (majorVer = 4) and (minorVer = 90) then 
     Result := 'Win ME' 
    end; 
    end; 
end; 
end; 

Z jakiegoś powodu mówi, że Windows8 Consumer Preview Budowanie 8250 (32bit), Windows XP - major Wersja 5. sprawdziłem i to ma być wersja 6.2 (według notepad.exe na Windows8) Czy to jest błąd czy coś jest nie tak? btw. mój Windows 8 jest up2date.

Jakieś pomysły?

EDIT: screenshot GETOS

+4

Czy próbowałeś debugowania go? Sprawdź, co otrzymasz z powrotem w 'osVerInfo' i prześledź, aby zobaczyć, jak skończysz z tym wynikiem. To da ci pojęcie o tym, co się dzieje. –

+0

Przeanalizowałem cały osVerInfo i debugowałem go. Mówi Major Version 5. –

+7

może twoja aplikacja działa w trybie zgodności XP? –

Odpowiedz

11

Powodem takiego zachowania jest tryb XP Zgodność Delphi 7 IDE został uruchomiony w trybie zgodności.

1

W systemie Windows 8.0 wersja 6.2 jest poprawna - również numer wersji. W systemie Windows 8.1 otrzymujesz także wersję 6.2. Ale teraz Numer wersji ist 6.3 Build 9600. Możesz go zobaczyć w info-systemie. GetVersionEx pozwala tylko 0,1,2 dla Win32MinorVersion. Jeśli potrzebujesz tych informacji, możesz je odczytać z klucza rejestru "Wersja" w HKCU \ Software \ Microsoft \ Internet Explorer \ Main \ WindowsSearch. Pozdrawiam, pyta