Page 1 sur 2
Mauvais numéro retourné par OSVersion() sous Windows 10
Publié : ven. 10/juil./2015 16:25
par Marc56
Windows 8.1
C:\>ver
Microsoft Windows [version 6.3.9600]
Debug OSVersion() =>
90 Ok
Windows 10
C:\>ver
Microsoft Windows [version 10.0.10162]
Debug OSVersion() =>
90 aussi!
Alors que dans le visualiseur de structures on a
#PB_OS_Windows_8 (= 90)
#PB_OS_Windows_Future (= 200) ; Nouvelle version de Windows (n'existant pas lorsque le programme a été écrit)
Au début j'ai pensé que PB se rendait compte que Windows 10 tournait dans virtualbox sous windows 8.1. Mais non, si je lance un XP dans cette même VM, osversion retourne alors
60 qui est bien la constante pour #PB_OS_Windows_XP
Bon, c'est pas trop gênant. J'espère juste que c'est prévu dans la 5.40.
(Oui, d'accord W10 est encore en bêta, mais il sort officiellement le 29 juillet)
Je ne sais pas sur quelle API se base la fonction OSVersion() de PB ?
Perso, j'ai toujours utilisé 'ver' et 'winver' pour identifier la version.

Re: Mauvais numéro retourné par OSVersion() sous Windows 10
Publié : ven. 10/juil./2015 16:41
par Ar-S
Nul doute qu'ils corrigeront ceci dans la 5.40 (ou 5.32 ?)
Sous MINT 17.2 l'OS version est de 2000

ce qui correspond bien à #PB_OS_Linux_Future
Re: Mauvais numéro retourné par OSVersion() sous Windows 10
Publié : ven. 10/juil./2015 16:59
par blendman
Ar-S a écrit :Nul doute qu'ils corrigeront ceci dans la 5.40 (ou 5.32 ?)
et elle sort quand cette 5.40 ?

Re: Mauvais numéro retourné par OSVersion() sous Windows 10
Publié : ven. 10/juil./2015 17:56
par Ar-S
héhé faut demander au grand Manitou
Re: Mauvais numéro retourné par OSVersion() sous Windows 10
Publié : ven. 10/juil./2015 18:25
par falsam
Bonjour Marc.
Pourrais tu tester ce code et le mettre à jour avec la valeur retourner dans la variable sVersion.
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"
Default: ProcedureReturn sVersion
EndSelect
EndProcedure
Debug VersionToName(NativeGetVersion())
Merci

Re: Mauvais numéro retourné par OSVersion() sous Windows 10
Publié : sam. 11/juil./2015 6:58
par Marc56
falsam a écrit :et elle sort quand cette 5.40 ?
Fred a donné une indication la semaine dernière
...'
Back on PureBasic: yes we are hard at work to ship the new release (which will be an LTS one - yes it's 2 years already). We except it to be out for a beta in august and final in september. It already has a quite big list of new stuffs !'
http://www.purebasic.fr/english/viewtop ... 67#p467467
falsam a écrit :Pourrais tu tester ce code et le mettre à jour avec la valeur retourner dans la variable sVersion.
Done. Marche pô
Attente du démarrage du programme...
Type d'exécutable: Windows - x64 (64bit, Unicode)
Exécutable démarré.
[ERREUR] Ligne: 7
[ERREUR] Accès mémoire invalide. (erreur d'écriture à l'adresse 0)
Ligne 7: proc = GetProcAddress_(lib, "RtlGetVersion")
Je pensais avoir installé la version démo (l'erreur venant d'une instruction d'appel direct API) mais ce n'est pas cela. J'ai bien installé ma version sous licence.
Edit: Même message avec la version x86 de PB 5.31 complet (avec en plus un tas de messages méchants de Windows 10 quand j'ai voulu installer une version x86 sur ce bel os neuf x64)

Re: Mauvais numéro retourné par OSVersion() sous Windows 10
Publié : sam. 11/juil./2015 8:32
par Mesa
Dans le même fil, Fred a dit aussi
For example, we are now toying with a LLVM backend for PB which is much easier to do, thanks to the JS pipeline which is more highlevel than raw ASM one. It won't be in the 5.40 version, but it should be ready one day or another
Ça veut dire qu'il(s) étudie(nt) le "compilateur" LLVM et ici
http://llvm.org/Features.html on peut lire:
An easily retargettable code generator, which currently supports X86, X86-64, PowerPC, PowerPC-64, ARM, Thumb, SPARC, Alpha, CellSPU, MIPS, MSP430, SystemZ, and XCore.
A Just-In-Time (JIT) code generation system, which currently supports X86, X86-64, ARM, AArch64, Mips, SystemZ, PowerPC, and PowerPC-64.
Il est donc possible d'espérer une version ARM et donc android (au mieux) après la version 5.40 de PB ...
M.
Re: Mauvais numéro retourné par OSVersion() sous Windows 10
Publié : sam. 11/juil./2015 10:00
par GallyHC
Pour Windows, un code simple que l'on peu forcement exploiter en attendant la nouvelle version de PB :
Code : Tout sélectionner
;
; VERSION DE WINDOWS.
;
Define osv.OSVERSIONINFO
osv\dwOSVersionInfoSize=SizeOf(OSVERSIONINFO)
If GetVersionEx_(osv) = #True
Debug Str(osv\dwMajorVersion) + "." + Str(osv\dwMinorVersion) + "." + Str(osv\dwBuildNumber)
EndIf
et voila ce que pourrait donné le code en attendant :
Code : Tout sélectionner
Select OSVersion()
Case #PB_OS_Windows_NT3_51
Case #PB_OS_Windows_95
Case #PB_OS_Windows_NT_4
Case #PB_OS_Windows_98
Case #PB_OS_Windows_ME
Case #PB_OS_Windows_2000
Case #PB_OS_Windows_XP
Case #PB_OS_Windows_Server_2003
Case #PB_OS_Windows_Vista
Case #PB_OS_Windows_Server_2008
Case #PB_OS_Windows_7
Case #PB_OS_Windows_Server_2008_R2
Case #PB_OS_Windows_Server_2012
Case #PB_OS_Windows_8, #PB_OS_Windows_Future
Define osv.OSVERSIONINFO
osv\dwOSVersionInfoSize=SizeOf(OSVERSIONINFO)
If GetVersionEx_(osv) = #True
If osv\dwMajorVersion = 10
Debug "C'est un Windows 10"
EndIf
Debug Str(osv\dwMajorVersion) + "." + Str(osv\dwMinorVersion) + "." + Str(osv\dwBuildNumber)
EndIf
Default
Debug "La c'est un problème"
EndSelect
Cordialement,
GallyHC
Re: Mauvais numéro retourné par OSVersion() sous Windows 10
Publié : sam. 11/juil./2015 10:18
par falsam
Merci pour cette alternative Gally. J'attend de voir la valeur retourné par Window 10.
Marc, merci d'avoir accepter de faire le cobaye avec mon code. Le résultat n'est pas celui que j'attendais mais je suis presque pas étonné. Je pense que Windows 10 va nous réserver quelques surprises. Je pense que tu testeras le code de gally. A plus tard pour le résultat.
Re: Mauvais numéro retourné par OSVersion() sous Windows 10
Publié : sam. 11/juil./2015 10:48
par falsam
Marc56 a écrit :falsam a écrit :et elle sort quand cette 5.40 ?
Fred a donné une indication la semaine dernière
Faudrait voir ne pas me confondre avec Blendman. Ce manant, cet hérétique
blendman a écrit :et elle sort quand cette 5.40 ?

Re: Mauvais numéro retourné par OSVersion() sous Windows 10
Publié : sam. 11/juil./2015 13:37
par Marc56
@falsam: Désolé
@GallyHC: 6.2.9200
(Windows 10 Pro Insider Preview - Version d'évaluation. Build 10162)(Virtualbox 4.3)
Re: Mauvais numéro retourné par OSVersion() sous Windows 10
Publié : sam. 11/juil./2015 14:29
par GallyHC
Bonjour,
Heuuu la y aura un problème, avec une version donné par la dll de Windows a "6.2.9200" et avec ce que tu donne dans ton premier poste "Microsoft Windows [version 6.3.9600]" pour Windows 8 donc "6.3.9600".
Windows 10 a une version moindre que Windows 8 (problème). D'où le bug avec "PureBasic" qui compare aussi, surement les numéro de version des OS.
Cordialement,
GallyHC
Re: Mauvais numéro retourné par OSVersion() sous Windows 10
Publié : sam. 11/juil./2015 16:10
par Marc56
Ton programme retourne la même valeur pour Windows 8.1 et Windows 10
Windows 8.1
Ver : 6.3.9600
Winver : 6.3.9600
PB : 6.2.9200
Windows 10
Ver 10.0.10162
Winver : 10.0.10162
PB: 6.2.9200
Re: Mauvais numéro retourné par OSVersion() sous Windows 10
Publié : sam. 11/juil./2015 19:12
par GallyHC
Bonjour,
Mon source utilise "GetVersionEx_()", fonction de Microsoft pour avoir la version de Windows. Le problème est donc la (tu as une version beta).
Cordialement,
GallyHC
Re: Mauvais numéro retourné par OSVersion() sous Windows 10
Publié : dim. 12/juil./2015 10:23
par GallyHC
Bonjour,
Un code pour avoir quelque informations supplémentaire.
Code : Tout sélectionner
#PRODUCT_ULTIMATE = 1
#PRODUCT_HOME_PREMIUM = 3
#PRODUCT_HOME_BASIC = 2
#PRODUCT_ENTERPRISE = 4
#PRODUCT_BUSINESS = 6
#PRODUCT_STANDARD_SERVER = 7
#PRODUCT_DATACENTER_SERVER = 8
#PRODUCT_SMALLBUSINESS_SERVER = 9
#PRODUCT_DATACENTER_SERVER_CORE = $0C
#PRODUCT_ENTERPRISE_SERVER = $0A
#PRODUCT_STARTER = $0B
#PRODUCT_STANDARD_SERVER_CORE = $0D
#PRODUCT_ENTERPRISE_SERVER_CORE = $0E
#PRODUCT_ENTERPRISE_SERVER_IA64 = $0F
#PRODUCT_WEB_SERVER = $11
#PRODUCT_CLUSTER_SERVER = $12
#PRODUCT_SMALLBUSINESS_SERVER_PREMIUM = $19
#PRODUCT_WEB_SERVER_CORE = $1D
#PRODUCT_PROFESSIONAL = $30
#KEY_WOW64_64KEY = $100
#KEY_WOW64_32KEY = $200
;
;
;
Procedure Is64Bit()
;
Protected.i retval, openlib
Protected *IsWow64
openlib = OpenLibrary(0, "Kernel32.dll")
If openlib
*IsWow64 = GetFunction(0,"IsWow64Process")
If *IsWow64
CallFunctionFast(*IsWow64, GetCurrentProcess_(), @retval)
CloseLibrary(0)
ProcedureReturn retval
EndIf
EndIf
ProcedureReturn -1
EndProcedure
;
;
;
Procedure.s GetWindowsProductKey()
; ROUTINE DU PRODUCTKEY DE WINDOWS.
Protected i.i
Protected j.i
Protected x.i
Protected hKey.i
Protected lRes.i
Protected size.i = 280
Protected result.s
Protected *memkey = AllocateMemory(size)
Protected *newmem = AllocateMemory(size)
Protected *digits = AllocateMemory(25)
PokeS(*digits, "BCDFGHJKMPQRTVWXY2346789", -1, #PB_Ascii)
If OSVersion() <= #PB_OS_Windows_2000
lRes = RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows NT\CurrentVersion", 0, #KEY_READ, @hKey)
Else
lRes = RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows NT\CurrentVersion", 0, #KEY_READ | #KEY_WOW64_64KEY, @hKey)
EndIf
If lRes = #ERROR_SUCCESS
RegQueryValueEx_(hKey, "DigitalProductID", 0, 0, *memkey, @size)
RegCloseKey_(hKey)
If size <> 280
For i = 24 To 0 Step -1
x = 0
For j = 66 To 52 Step -1
x = (x << 8) + PeekA(*memkey + j)
PokeA(*memkey + j, x / 24)
x % 24
Next j
PokeA(*newmem + i, PeekA(*digits + x))
Next i
For i = 0 To 15 Step 5
result + PeekS(*newmem + i, 5, #PB_Ascii) + " "
Next i
result + PeekS(*newmem + 20, 5, #PB_Ascii)
EndIf
EndIf
FreeMemory(*memkey)
FreeMemory(*newmem)
FreeMemory(*digits)
ProcedureReturn Result
EndProcedure
;
;
;
Define sType.s
Define osv.OSVERSIONINFOEX
osv\dwOSVersionInfoSize=SizeOf(OSVERSIONINFOEX)
If GetVersionEx_(osv) = #True
Debug "OS Version : " + Str(osv\dwMajorVersion) + "." + Str(osv\dwMinorVersion) + "." + Str(osv\dwBuildNumber)
Debug "Windows key : " + GetWindowsProductKey()
Debug "Service Pack : " + Str(osv\wServicePackMajor) + "." + Str(osv\wServicePackMajor)
Debug "Service Info : " + PeekS(@osv\szCSDVersion, -1, #PB_Unicode)
Select osv\wProductType
Case #PRODUCT_ULTIMATE
sType = "Ultimate Edition"
Case #PRODUCT_PROFESSIONAL
sType = "Professional"
Case #PRODUCT_HOME_PREMIUM
sType = "Home Premium Edition"
Case #PRODUCT_HOME_BASIC
sType = "Home Basic Edition"
Case #PRODUCT_ENTERPRISE
sType = "Enterprise Edition"
Case #PRODUCT_BUSINESS
sType = "Business Edition"
Case #PRODUCT_STARTER:
sType = "Starter Edition"
Case #PRODUCT_CLUSTER_SERVER
sType = "Cluster Server Edition"
Case #PRODUCT_DATACENTER_SERVER
sType = "Datacenter Edition"
Case #PRODUCT_DATACENTER_SERVER_CORE
sType = "Datacenter Edition (core installation)"
Case #PRODUCT_ENTERPRISE_SERVER
sType = "Enterprise Edition"
Case #PRODUCT_ENTERPRISE_SERVER_CORE
sType = "Enterprise Edition (core installation)"
Case #PRODUCT_ENTERPRISE_SERVER_IA64
sType = "Enterprise Edition for Itanium-based Systems"
Case #PRODUCT_SMALLBUSINESS_SERVER
sType = "Small Business Server"
Case #PRODUCT_SMALLBUSINESS_SERVER_PREMIUM
sType = "Small Business Server Premium Edition"
Case #PRODUCT_STANDARD_SERVER
sType = "Standard Edition"
Case #PRODUCT_STANDARD_SERVER_CORE
sType = "Standard Edition (core installation)"
Case #PRODUCT_WEB_SERVER
sType = "Web Server Edition"
Case #PRODUCT_WEB_SERVER_CORE
sType = "Web Server Edition (core installation)"
Default
sType = ""
EndSelect
Debug "Windows Type : " + sType
Select Is64Bit()
Case 0
Debug "x32"
Case 1
Debug "x64"
EndSelect
EndIf
Cordialement,
GallyHC