Mauvais numéro retourné par OSVersion() sous Windows 10

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par GallyHC »

Bonjour,

Pour être sur des informations et voir si ce n'est pas un problème de version de ta version beta, regarde les clefs de registre a "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" et regarde "CurrentVersion" et "CurrentBuild". En les mettant ensemble tu as la version complète.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par GallyHC »

Bonjour,

Comme "Marc56", na pas eu le temps de faire le teste je l'ai fait. La code-source ci-dessous donne "6.2.9200", PAS BON pour "Win10".

Code : Tout sélectionner

Define osv.OSVERSIONINFOEX
osv\dwOSVersionInfoSize=SizeOf(OSVERSIONINFOEX)
If GetVersionEx_(osv) = #True
  Debug Str(osv\dwMajorVersion) + "." + Str(osv\dwMinorVersion) + "." + Str(osv\dwBuildNumber)
EndIf
Par contre le code ci-dessous donne "6.3.10240", Visiblement bon pour "Win10".

Code : Tout sélectionner

#KEY_WOW64_64KEY                      = $100
#KEY_WOW64_32KEY                      = $200

Procedure.s ReadRegKey(OpenKey.i, SubKey.s, ValueName.s)
; ROUTINE DE LECTURE DE CLEF DE REGISTRES.
  Define iRes.i      = 0
  Define hKey.i      = 0
  Define DataSize.i  = 255
  Define KeyValue.s  = Space(DataSize)

  If Left(SubKey, 1) = "\"
    SubKey = Right(SubKey, Len(SubKey) - 1)
  EndIf
  If OSVersion() <= #PB_OS_Windows_2000
    iRes = RegOpenKeyEx_(OpenKey, SubKey, 0, #KEY_READ | #KEY_WOW64_32KEY, @hKey)
  Else
    iRes = RegOpenKeyEx_(OpenKey, SubKey, 0, #KEY_READ | #KEY_WOW64_64KEY, @hKey)
  EndIf
  If iRes
    KeyValue = #NULL$
  Else
    If RegQueryValueEx_(hKey, ValueName, 0, 0, @KeyValue, @DataSize)
      KeyValue = #NULL$
    Else
      KeyValue = Left(KeyValue, DataSize - 1)
    EndIf
    RegCloseKey_(hKey)
  EndIf
  ProcedureReturn KeyValue

EndProcedure

Define sCurrentVer.s = ReadRegKey(#HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentVersion")
Define sCurrentBld.s = ReadRegKey(#HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentBuild")

Debug sCurrentVer + "." + sCurrentBld
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par falsam »

Petit source à tester. Pour les noobs (Je ne nommerais personne), pensez à désactiver l'option unicode dans les paramètres de compilation.

Code : Tout sélectionner

Procedure.s NativeGetVersion()
    Protected Dim tOSVw.l($54)
   
    lib = LoadLibrary_("ntdll.dll")
    proc = GetProcAddress_(lib, "RtlGetVersion")
    tOSVw(0) = $54 * $4
    CallFunctionFast(proc, @tOSVw())
    FreeLibrary_(lib)

    ProcedureReturn Str(tOSVw(4)) + "." + Str(tOSVw(1)) + "." + Str(tOSVw(2))
EndProcedure

Procedure.s VersionToName(sVersion.s)
  
  Select sVersion
      
    Case "1.0.0": ProcedureReturn "Windows 95"
    Case "1.1.0": ProcedureReturn "Windows 98"
    Case "1.9.0": ProcedureReturn "Windows Millenium"
    Case "2.3.0": ProcedureReturn "Windows NT 3.51"
    Case "2.4.0": ProcedureReturn "Windows NT 4.0"
    Case "2.5.0": ProcedureReturn "Windows 2000"
    Case "2.5.1": ProcedureReturn "Windows XP"
    Case "2.5.3": ProcedureReturn "Windows 2003 (SERVER)"
    Case "2.6.0": ProcedureReturn "Windows Vista"
    Case "2.6.1": ProcedureReturn "Windows 7"
    Case "2.6.2": ProcedureReturn "Windows 8"
    Case "2.6.3": ProcedureReturn "Windows 8.1"
    Case "2.10.0" : ProcedureReturn "Windows 10.0"  
    Default: ProcedureReturn sVersion
      
  EndSelect
EndProcedure  
  
Debug VersionToName(NativeGetVersion())
PS : De toute façon dans la prochaine version, Fred aura changé sa fonction OSVersion()
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre