2012-05-11 5 views
5

Sto usando questo codice per rilevare WindowsVersion su un PC.Windows 8 Consumer Preview Wrong Major Version?

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; 

Per qualche ragione si dice che Windows8 Consumer Preview Costruire 8250 (a 32 bit) è Windows XP - versione principale 5. Ho controllato e dovrebbe essere la versione 6.2 (in base alla notepad.exe su Windows8) Si tratta di una bug o c'è qualcosa di sbagliato? btw. il mio Windows 8 è up2date.

Qualsiasi idea?

EDIT: ScreenShot GETOS

+4

Hai provato a eseguirne il debug? Controlla per vedere cosa ottieni in "osVerInfo" e tracciarlo per vedere come finisci con quel risultato. Questo ti darà un'idea di cosa sta succedendo. –

+0

Ho controllato l'intero osVerInfo e l'ho debugato. Dice la versione principale 5. –

+7

forse la tua app è in esecuzione in modalità di compatibilità XP? –

risposta

11

La ragione di questo comportamento è la modalità XP di compatibilità, IDE di Delphi 7 era in esecuzione in modalità di compatibilità.

1

Per Windows 8.0 la versione 6.2 è corretta, anche il numero di build. Con Windows 8.1 si ottiene anche la versione 6.2. Ma ora il numero di versione è 6.3 Build 9600. Puoi vederlo nelle informazioni di sistema. GetVersionEx consente solo 0,1,2 per Win32MinorVersion. Se hai bisogno di queste informazioni, puoi leggerle dalla chiave di registro "Versione" in HKCU \ Software \ Microsoft \ Internet Explorer \ Main \ WindowsSearch. Cordiali saluti, chiede