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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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