olha uma coisa básica pra isso colega:
em um módulo cole
Option Explicit
Private 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
Private 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
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Enum HKEYS
HKEY_LOCAL_MACHINE = &H80000002
End Enum
Private Const SYNCHRONIZE As Long = &H100000
Private Const STANDARD_RIGHTS_ALL As Long = &H1F0000
Private Const KEY_QUERY_VALUE As Long = &H1
Private Const KEY_SET_VALUE As Long = &H2
Private Const KEY_CREATE_SUB_KEY As Long = &H4
Private Const KEY_ENUMERATE_SUB_KEYS As Long = &H8
Private Const KEY_NOTIFY As Long = &H10
Private Const KEY_CREATE_LINK As Long = &H20
Private Const KEY_ALL_ACCESS As Long = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
Private Const ERROR_SUCCESS As Long = 0&
Private Const READ_CONTROL = &H20000
Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Private Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))
Private Function Reg_CarregarValor(ByVal regHKEY As HKEYS, _
ByVal sSection As String, _
ByVal sKey As String, _
Optional ByVal sDefault As String) As String
Dim lReturn As Long
Dim hKey As Long
Dim lType As Long
Dim lBytes As Long
Dim sBuffer As String
Reg_CarregarValor = sDefault
lReturn = RegOpenKeyEx(regHKEY, REGSubKey(sSection), 0&, KEY_ALL_ACCESS, hKey)
If lReturn = 5 Then
lReturn = RegOpenKeyEx(regHKEY, REGSubKey(sSection), 0&, KEY_EXECUTE, hKey)
End If
If lReturn = ERROR_SUCCESS Then
If sKey = "*" Then
sKey = vbNullString
End If
lReturn = RegQueryValueEx(hKey, sKey, 0&, lType, ByVal sBuffer, lBytes)
If lReturn = ERROR_SUCCESS Then
If lBytes > 0 Then
sBuffer = Space$(lBytes)
lReturn = RegQueryValueEx(hKey, sKey, 0&, lType, ByVal sBuffer, Len(sBuffer))
If lReturn = ERROR_SUCCESS Then
Reg_CarregarValor = Left$(sBuffer, lBytes - 1)
End If
End If
End If
End If
End Function
Private Function REGSubKey(Optional ByVal sSection As String) As String
If Left$(sSection, 1) = "" Then
sSection = Mid$(sSection, 2)
End If
If Right$(sSection, 1) = "" Then
sSection = Mid$(sSection, 1, Len(sSection) - 1)
End If
REGSubKey = sSection
End Function
Public Function IsAcrobatReaderInstalled() As Boolean
Dim strFile As String
On Error GoTo errHandler
strFile = Reg_CarregarValor(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AcroRd32.exe", "")
IsAcrobatReaderInstalled = FileLen(strFile)
Err.Clear
errHandler:
If Err <> 0 Then
IsAcrobatReaderInstalled = False
End If
End Function
agora no form em um botão
If IsAcrobatReaderInstalled = True Then
MsgBox "o Acrobat Reader está instalado"
Else
MsgBox "O Acrobat Reader não está instalado"
End If
o código acima verifica se o acrobat está instalado, para saber sobre o iE
basta fazer a seguinte alteração
nesta linha quase no final do módulo
strFile = Reg_CarregarValor(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\IEXPLORE.EXE", "")
veja se você consegue