Un 'bicho alado' de nombre McPegasus decía: Pues necesito conocer las siguiente Versiones mediante código VBA, del equipo donde se esté ejecutando el código. Internet Explorer Outlook Express Microsoft Outlook Sistema Operativo del Wentanucos. El Búho respondió por partes: ============================= 'version de Windows 'En un Modulo: Private Declare Function GetVersion Lib "kernel32" () As Long Public Function GetWinVersion() As String Dim Ver As Long, WinVer As Long Ver = GetVersion() WinVer = Ver And &HFFFF& GetWinVersion = Format((WinVer Mod 256) + ((WinVer \ 256) / 100), "Fixed") End Function Sacado de la Allapi.net Seguimos buscando las otras... ¿Quiza en el propio Reg de Windows? Es otra posibilidad, quizá la mejor, pues ahi esta todito...¡¡¡ ...continuaba Búho: En el Registro del Wentanucos: HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\INTERNET EXPLORER\VERSION HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\OUTLOOK EXPRESS\VERSION INFO\CURRENT Y un Mostruo en programación, llamado Eduardo Olaz, 'lo bordó': =============================================================== Aquí tienes un bonito código para leer valores del registro Tal cual está es para Access 2000 y siguientes. Al tener tú Access 97 deberás cambiar los parámetros declarados como ClavesPrincipales por Long las constantes enumerativas que están en el Enum ClavesPrincipales deberás declararlas como constantes normales de tipo long La forma de ejecutarlo sería así: Versión de Windows ValorDeLaClave( _ HKEY_LOCAL_MACHINE, _ "Software\Microsoft\Windows\CurrentVersion", _ "Version") Devuelve algo así como "Windows 98 " Versión de Internet Explorer ValorDeLaClave( _ HKEY_LOCAL_MACHINE, _ "Software\Microsoft\Internet Explorer", _ "Version") Devuelve algo así como "5.50.4522.1800" Versión de Outlook Express ValorDeLaClave( _ HKEY_LOCAL_MACHINE, _ "Software\Microsoft\Outlook Express\Version Info", _ "Current") Devuelve algo así como "5,50,4522,1200" De forma similar se puede obtener cualquier dato del registro. como el de los comentarios: Carpeta de Word ValordelaClave ( _ HKEY_CURRENT_USER, _ "Software\Microsoft\Office\9.0\Word\Options", _ "PROGRAMDIR") Devuelve algo así como "C:\Archivos de programa\Microsoft Office\Office\" Carpeta de Macromedia Flash ValorDeLaClave( _ HKEY_LOCAL_MACHINE, _ "Software\Macromedia\Flash\6\Installation", _ "InstallPath") Devuelve algo así como "C:\Archivos de programa\Macromedia\Flash MX" Y así hasta que te canses... ____________________________________ Option Explicit Public Enum ClavesPrincipales HKEY_CLASSES_ROOT = &H80000000 HKEY_CURRENT_USER = &H80000001 HKEY_LOCAL_MACHINE = &H80000002 HKEY_USERS = &H80000003 HKEY_CURRENT_CONFIG = &H80000005 HKEY_DYN_DATA = &H80000006 End Enum Public Declare Function RegOpenKeyEx _ Lib "advapi32.dll" _ Alias "RegOpenKeyExA" ( _ ByVal hKey As Long, _ ByVal lpSubKey As String, _ ByVal ulOptions As Long, _ ByVal samDesired As Long, _ phkResult As Long) _ As Long Public Declare Function RegCloseKey _ Lib "advapi32.dll" ( _ ByVal hKey As Long) _ As Long Public Declare Function RegQueryValueEx _ Lib "advapi32.dll" _ Alias "RegQueryValueExA" ( _ ByVal hKey As Long, _ ByVal lpValueName As String, _ ByVal lpReserved As Long, _ lpType As Long, _ lpData As Any, _ lpcbData As Long) _ As Long ' ************ Constantes ************* Public Const HKEY_PERFORMANCE_DATA = &H80000004 Public Const REG_BINARY = 3 Public Const REG_DWORD = 4 Public Const REG_DWORD_BIG_ENDIAN = 5 Public Const REG_DWORD_LITTLE_ENDIAN = 4 Public Const REG_EXPAND_SZ = 2 Public Const REG_LINK = 6 Public Const REG_MULTI_SZ = 7 Public Const REG_NONE = 0 Public Const REG_RESOURCE_LIST = 8 Public Const REG_SZ = 1 ' Tipo de dato string Public Const KEY_READ = &H20019 ____________________________________ Aquí vienen la función para leer el registro ____________________________________ Option Explicit 'La función ValorDeLaClave(Claveprincipal, SubClave, Sección) ' devuelve el valor de la sección de la clave ' Sólo devuelve datos del tipo cadena 'Por ejemplo ' ValordelaClave (HKEY_CURRENT_USER, "Software\Microsoft\Office\9.0\Word\Options","PROGRAMDIR") ' (según la configuración del sistema) ' devolverá algo así como: ' "C:\Archivos de programa\Microsoft Office\Office\" ' ValordelaClave (HKEY_LOCAL_MACHINE,"SOFTWARE\MICROSOFT GAMES\AGE OF EMPIRES\2.0","EXE PATH") ' devolverá, si lo tienes instalado, la ruta del juego Public Function ValorDeLaClave( _ ByVal Claveprincipal As ClavesPrincipales, _ ByVal SubClave As String, _ ByVal Sección As String) _ As String 'Función desarrollada por Eduardo Olaz ' eduardo@olaz.net 'Última modificación el 13 de diciembre de 2001 Dim hKey As Long ' En hKey se va a cargar el nº de manejador de la clave del registro Dim subkey As String ' Nombre de la subclave Dim strBuffer As String ' Contendrá el valor de la clave del registro Dim lngTipoDeDato As Long ' Tipo de dato a leer Dim lngStrBuffer As Long ' Longitud del valor de strBuffer Dim lngValorDevuelto As Long ' Valor numérico devuelto por la función API Dim strClaveprincipal As String Select Case Claveprincipal Case HKEY_CLASSES_ROOT strClaveprincipal = "HKEY_CLASSES_ROOT" Case HKEY_CURRENT_USER strClaveprincipal = "HKEY_CURRENT_USER" Case HKEY_LOCAL_MACHINE strClaveprincipal = "HKEY_LOCAL_MACHINE" Case HKEY_USERS strClaveprincipal = "HKEY_USERS" Case HKEY_CURRENT_CONFIG strClaveprincipal = "HKEY_CURRENT_CONFIG" Case HKEY_DYN_DATA strClaveprincipal = "HKEY_DYN_DATA" Case Else strClaveprincipal = "CLAVE DESCONOCIDA" End Select ' Abrimos la clave del registro lngValorDevuelto = RegOpenKeyEx(Claveprincipal, SubClave, 0, KEY_READ, hKey) If lngValorDevuelto <> 0 Then MsgBox "No se puede abrir la Sección " _ & Sección _ & vbCrLf & "de la Clave: " _ & vbCrLf & vbCrLf _ & strClaveprincipal & "\" & SubClave, _ vbCritical, _ " Error al intentar abrir el registro" Exit Function End If ' Creamos un Buffer en el que volcar el valor de la clave strBuffer = Space(255) lngStrBuffer = 255 ' Llamamos a RegQueryValueEx para que vuelque el valor en strBuffer lngValorDevuelto = RegQueryValueEx( _ hKey, _ Sección, _ 0, _ lngTipoDeDato, _ ByVal strBuffer, _ lngStrBuffer) ' Sólo vamos a aceptar una respuesta del tipo cadena If lngTipoDeDato = REG_SZ Then ' Quitamos los espacios vacíos del buffer strBuffer = Left(strBuffer, lngStrBuffer) ValorDeLaClave = strBuffer Else ' El tipo de dato no es string o se ha escrito mal la sección ValorDeLaClave = "" MsgBox "No se puede interpretar el contenido de la Sección " _ & Sección _ & vbCrLf & "de la Clave: " _ & vbCrLf & vbCrLf _ & strClaveprincipal & "\" & SubClave, _ vbCritical, _ " Error al tratar de leer la sección " & Sección End If ' Cierra la clave del registro lngValorDevuelto = RegCloseKey(hKey) End Function ____________________________________ Que os aproveche: