quinta-feira, 2 de abril de 2009

Identificando a versão do Windows com Visual Basic



Contador de acessoVisitas


Muitas vezes é necessário identificar qual a versão do windows está sendo usado. O código abaixo mostra como fazer isso.

O código identifica exatamente se a versão do Windows é 3.X, 98, 98, 98 SE, ME, NT, 2000, XP ou se é uma versão 64 Bits. Não foi possível testar e identificar as versões Vista, 2003 e Seven, porém quem desejar basta utilizar o código e testar o valor das variáveis. Como não foi testado nessas versões, não é possível garantir o seu funcionamento para estas.

Crie um módulo e insira as seguintes linhas


Public Type T_WINVER
   PlatformID As Long
   VersionName As String
   VersionNo As String
   ServicePack As String
   BuildNo As String
End Type

Public Type T_OSVersionInfo
   OSVSize As Long
   dwVerMajor As Long
   dwVerMinor As Long
   dwBuildNumber As Long
   PlatformID As Long
   szCSDVersion As String * 128
End Type

Public Const VER_PLATFORM_WIN32s = 0
Public Const VER_PLATFORM_WIN32_WINDOWS = 1
Public Const VER_PLATFORM_WIN32_NT = 2

Public Declare Function GetVersionEx Lib "Kernel32" _
   Alias "GetVersionExA" _
   (lpVersionInformation As T_OSVersionInfo) As Long


No mesmo módulo, ou no seu form inclua as linhas abaixo. O detalhe é que se resolver colocar essa rotina dentro do mesmo módulo a rotina tera que ser publica ou seja:

Public Sub getWindowsVersion(ByRef win As T_WINVER)


Private Sub getWindowsVersion(ByRef win As T_WINVER)
   Dim OSVersionInfo As T_OSVersionInfo
   Dim pos As Integer
   Dim sVer As String
   Dim sBuild As String

   OSVersionInfo.OSVSize = Len(OSVersionInfo)
   If GetVersionEx(OSVersionInfo) = 1 Then
      #If Win32 Then
         'PlatformId contém o valor que representan o SO
         'no mesmo PlatformId o Windows pode variar de acordo com a versão
         'do sistema
         win.PlatformID = OSVersionInfo.PlatformID

         Select Case OSVersionInfo.PlatformID
            Case VER_PLATFORM_WIN32s:
               win.VersionName = "Win32s"
            Case VER_PLATFORM_WIN32_NT:
               win.VersionName = "Windows NT"
               Select Case OSVersionInfo.dwVerMajor
                     Case 4:
                        win.VersionName = "Windows NT"
                     Case 5:
                        Select Case OSVersionInfo.dwVerMinor
                           Case 0: win.VersionName = "Windows 2000"
                           Case 1: win.VersionName = "Windows XP"
                        End Select
               End Select

            Case VER_PLATFORM_WIN32_WINDOWS:
               Select Case OSVersionInfo.dwVerMinor
                  Case 0: win.VersionName = "Windows 95"
                  Case 90: win.VersionName = "Windows ME"
                  Case Else: win.VersionName = "Windows 98"
               End Select
         End Select

         win.VersionNo = OSVersionInfo.dwVerMajor & "." & OSVersionInfo.dwVerMinor

         win.BuildNo = (OSVersionInfo.dwBuildNumber And &HFFFF&)

         pos = InStr(OSVersionInfo.szCSDVersion, Chr$(0))
         If pos Then
            win.ServicePack = Left$(OSVersionInfo.szCSDVersion, pos - 1)
         End If
      #ElseIf Win64 Then
         getWindowsVersion = "Windows 64 Bits"
      #Else
         getWindowsVersion = "Windows 3.X"
      #End If
   End If
End Sub


Agora crie a chamada para rotina onde preferir
Um exemplo de utilização segue abaixo


Dim win As T_WINVER
getWindowsVersion win
MsgBox "Nome: " & win.VersionName & Chr(13) & _
   "ID da Plataforma: " & win.PlatformID & Chr(13) & _
   "ServicePack: " & win.ServicePack & Chr(13) & _
   "Numero da Versão: " & win.VersionNo & Chr(13) & _
   "Build: " & win.BuildNo

Nenhum comentário:

Postar um comentário

Advogados
Visitas