Déterminer la version de Windows
Bonjour à toutes et à tous,
J'utilise Visual Basic 2010 Express pour bricoler un peu quelques trucs à mon modeste niveau et, malgré quelques recherches, je n'arrive pas à trouver de code intéressant pour déterminer la version de Windows utilisée sur le poste d'où serait lancée mon exécutable, de Windows 2000 à Windows 7.
J'ai tenté d'adapter ce code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| Private Declare Function GetVersionExA Lib "kernel32" (lpVersionInformation As OSVERSIONINFOEX) As Integer
Private Const VER_PLATFORM_WIN32_WINDOWS = 1
Private Const VER_PLATFORM_WIN32_NT = 2
'wProductType
Private Const VER_NT_WORKSTATION = 1 'Windows Vista, Windows XP Professional, Windows XP Home Edition, or Windows 2000 Professional
Private Const VER_NT_DOMAIN_CONTROLLER = 2 'Controleur de domaine sous Windows Serveur 2008,2003 ou 2000
Private Const VER_NT_SERVER = 3 'Windows Serveur 2008 , 2003 or 2000
Private Type OSVERSIONINFOEX
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
wServicePackMajor As Integer
wServicePackMinor As Integer
wSuiteMask As Integer
wProductType As Byte
wReserved As Byte
End Type
Public Function VersionWindows(ByRef sp As String) As String
Dim os As OSVERSIONINFOEX
os.dwOSVersionInfoSize = Len(os)
GetVersionExA os
sp = ""
With os
Select Case .dwPlatformId
Case VER_PLATFORM_WIN32_WINDOWS
Select Case .dwMinorVersion
Case 0
VersionWindows = "95"
Case 10
VersionWindows = "98"
Case 90
VersionWindows = "Me"
End Select
Case VER_PLATFORM_WIN32_NT
Select Case .dwMajorVersion
Case 3
VersionWindows = "NT 3.51"
Case 4
VersionWindows = "NT 4.0"
Case 5
If .dwMinorVersion = 0 Then
VersionWindows = "2000"
Else
VersionWindows = "XP"
End If
Case 6
If .wProductType = VER_NT_WORKSTATION Then
VersionWindows = "Vista"
Else
VersionWindows = "Windows Server 2008"
End If
End Select
End Select
If InStr(.szCSDVersion, Chr(0)) > 0 Then
sp = Left(.szCSDVersion, InStr(.szCSDVersion, Chr(0)) - 1)
End If
End With
End Function |
Mais ce code est issu d'une FAQ VB6, et par exemple "Type" n'est plus utilisable en VB.NET, en tous les cas dans la version de VB 2010 que j'ai téléchargée. Il faut lui préférer l'élément Structure. Du coup je modifie le type de cette manière, afin de pouvoir compiler :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| Private Structure OSVERSIONINFOEX
Dim dwOSVersionInfoSize As Long
Dim dwMajorVersion As Long
Dim dwMinorVersion As Long
Dim dwBuildNumber As Long
Dim dwPlatformId As Long
Dim szCSDVersion As String * 128
Dim wServicePackMajor As Integer
Dim wServicePackMinor As Integer
Dim wSuiteMask As Integer
Dim wProductType As Byte
Dim wReserved As Byte
End Structure |
Mais d'une je ne sais pas "traduire" en Structure la déclaration String*128, qui n'est pas acceptée à la compilation, et de deux, même si je ne déclare pas cette variable, j'obtiens une erreur de compilation plus tard, à l'exécution de la ligne GetVersionExA(os).
Est-il possible d'adapter le code pour une exécution en VB.NET ? Ou quelles sont les alternatives existantes ? A ce jour je n'ai rien trouvé de très clair (pour moi) sur le sujet...:?
Merci d'avance pour votre aide
Bonne journée