Pulsa aquí, si quieres la versión para Visual Basic .NET y C#.
Cómo averiguar la versión actual de Windows con Visual Basic 6.0, usando las funciones del API: GetVersion y GetVersionEx.
Aquí tienes la forma de averiguar la versión de Windows en la que se está ejecutando tu aplicación.
Te muestro dos formas de averiguarlo, una es usando la función GetVersion
y la otra es usando GetVersionEx que utiliza el tipo de datos
OSVERSIONINFOEX.
Aunque en realidad
son tres formas, pero dos de ellas usan la misma función
GetVersionEx aunque con dos versiones diferentes del tipo
OSVERSIONINFO.
La función GetVersion es muy simple, solo devuelve un valor de tipo Long en el que están los tres valores típicos de la versión: Mayor, Menor y Build. Lo que pasa es que está todo como "aglomerado" y hace falta desglosarlo, para ese desglose se deben tomar los valores dividiendo (o troceando) el valor en distintas partes, para eso se necesitan de otras funciones, ahora lo verás en la sección de cómo usar la función.
La definición de la función:
Private Declare Function GetVersion Lib "kernel32" () As Long
La función GetVersionEx utiliza un tipo de datos en el que se indican los diferentes valores. Esa versión puede usar el mismo tipo pero con más o menos información, por tanto, aquí te muestro dos definiciones según se quiera usar la versión reducida o extendida.
La definición de los tipos y las funciones:
' La versión simple Private Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End Type Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _ (lpVersionInformation As OSVERSIONINFO) As Long ' La versión extendida 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 Private Declare Function GetVersionEx2 Lib "kernel32" Alias "GetVersionExA" _ (lpVersionInformation As OSVERSIONINFOEX) As Long
Para usar la función GetVersion no hay que hacer nada especial, salvo guardar el valor en una variable de tipo Long, y como te comentaba antes, ese valor hay que "desgranarlo" para obtener los valores correspondientes.
Veamos cómo se usa y más abajo puedes ver las funciones "extras" que he usado:
Dim ret As Long Dim s As String ' Usando GetVersion ret = GetVersion Dim vMajor As Long, vMinor As Long, vBuild As Long vMajor = LoByte(LoWord(ret)) vMinor = HiByte(LoWord(ret)) ' A partir de NT 4 tiene el Build (no en Me/9x) vBuild = HiWord(ret) s = "Versión: " & _ vMajor & "." & vMinor & "." & vBuild
Para usar la versión GetVersionEx debemos declarar una variable del tipo OSVERSIONINFO que es donde nos indica los valores de la versión. Aquí te muestro el código de forma simple, pero en el ZIP con el proyecto completo para Visual Basic 6.0 tienes más información de cómo identificar el sistema operativo según los valores de la versión.
Dim OSInfo As OSVERSIONINFO Dim ret As Long Dim s As String OSInfo.szCSDVersion = Space$(128) OSInfo.dwOSVersionInfoSize = Len(OSInfo) ret = GetVersionEx(OSInfo) s = "MajorVersion " & OSInfo.dwMajorVersion & vbCrLf & _ "MinorVersion " & OSInfo.dwMinorVersion & vbCrLf & _ "BuildNumber " & OSInfo.dwBuildNumber & vbCrLf & _ "PlatformId " & OSInfo.dwPlatformId & vbCrLf & _ "CSDVersion " & szTrim(OSInfo.szCSDVersion) Me.txtOSVersion.Text = s
Las versiones de Windows dependen del valor de Mayor y Menor, (y la combinación de los dos), y más o menos te puede servir la siguiente tabla, que es aplicable a los valores de las dos funciones comentadas:
Sistema operativo | Mayor |
Windows NT 3.51 | 3 |
Windows 95, 98, Me y NT 4.0 | 4 |
Windows 2000, XP y 2003 | 5 |
Windows Vista/Longhorn | 6 |
Sistema operativo | Menor |
Windows NT 3.51 | 51 |
Windows 95 | 0 |
Windows 98 | 10 |
Windows Me | 90 |
Windows NT 4.0 | 0 |
Windows 2000 | 0 |
Windows XP | 1 |
Windows 2003 | 2 |
Windows Vista/Longhorn | 0 |
Por ejemplo, si el valor de Mayor es 5 y el de Menor es 2 es un Windows
2003 Server.
Si el valor de Mayor es 5 y el de Menor es 1 es un Windows XP.
Para averiguar cosas de Windows 9x o de Windows 2000 Server, si es XP Home o Profesional, lo ves en el ejemplo completo, que están casi todas las explicaciones necesarias y que son aburridas y no es plan de rellenar con cosas que a lo mejor no es lo que te interesa.
Y esto es todo, como siempre, espero que te sea de utilidad.
Nos vemos.
Guillermo
Private Function szTrim(ByVal s As String) As String ' Quita los caracteres en blanco y los Chr$(0) (13/Dic/01) Dim i As Long i = InStr(s, vbNullChar) If i Then s = Left$(s, i - 1) End If s = Trim$(s) szTrim = s End Function Private Function LoWord(ByVal Numero As Long) As Long ' Devuelve el LoWord del número pasado como parámetro LoWord = Numero And &HFFFF& End Function Private Function HiWord(ByVal Numero As Long) As Long ' Devuelve el HiWord del número pasado como parámetro HiWord = Numero \ &H10000 And &HFFFF& End Function Private Function LoByte(ByVal Numero As Integer) As Integer ' Devuelve el LoByte del número pasado como parámetro LoByte = Numero And &HFF End Function Private Function HiByte(ByVal Numero As Integer) As Integer ' Devuelve el HiByte del número pasado como parámetro HiByte = Numero \ &H100 And &HFF End Function
Fichero con el código de ejemplo:
versionWindows_VB6.zip - 9.43 KB
Contiene el proyecto y el ejecutable compilado.
(MD5
checksum: B1CCD3E1FE8452AACE406A9C91926771)