vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: COM/OLE/Registry/DLL · Sonstiges   |   VB-Versionen: VB4, VB5, VB605.09.03
Pfad einer ActiveX-Komponente ermitteln

Dieser Tipp zeigt, wie sich prüfen lässt, ob eine ActiveX-Komponente vorhanden ist, indem man den dazugehörigen Pfad aus der Registry ausiest.

Autor:   Florian PlatzerBewertung:  Views:  22.678 
www.vbmaster.gbadmin.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Haben Sie sich auch schon einmal gefragt, wie man prüfen kann, in welchem Verzeichnis sich eine bestimmte ActiveX-Komponente befindet? Hierzu braucht man lediglich den Klassennamen der Komponenten zu wissen. Ist die ActiveX-Komponente bereits auf dem System installiert und registriert, legt Windows den dazugehörigen Pfad in der Registry ab.

Unser heutiger Tipp zeigt, wie man anhand des Klassennamen das Verzeichnis der ActiveX-Komponente ermitteln kann.

Fügen Sie hierzu nachfolgenden Code in ein Modul:

Option Explicit
 
' benötigte API-Deklarationen
Private Const HKEY_CLASSES_ROOT As Long = &H80000000
 
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
Private Const KEY_NOTIFY = &H10
Private Const KEY_READ = KEY_QUERY_VALUE Or _
  KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY
Private Const REG_SZ = 1
Private Const REG_DWORD = 4
Private Const ERROR_SUCCESS = 0&
 
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 RegCloseKey Lib "advapi32.dll" ( _
  ByVal hKey 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 Any) As Long
' Wert aus Registry auslesen
Public Function GetValue(ByVal hKey As Long, _
  ByVal sKey As String, _
  ByVal sField As String, _
  vValue As Variant) As Boolean
 
  Dim nResult As Long
  Dim nKeyOpen As Long
  Dim dwType As Long
  Dim nValue As Long
  Dim nLen As Long
  Dim sBuffer As String
 
  GetValue = False
 
  ' Registry-Schlüssel öffnen
  nResult = RegOpenKeyEx(hKey, sKey, 0, KEY_READ, nKeyOpen)
  If nResult <> ERROR_SUCCESS Then Exit Function
 
  ' Werte-Typ bestimmen
  nResult = RegQueryValueEx(nKeyOpen, sField, 0&, _
    dwType, ByVal 0&, nLen)
 
  If nResult = ERROR_SUCCESS Then
    Select Case dwType
      Case REG_SZ
        ' String
        sBuffer = Space$(nLen + 1)
        nResult = RegQueryValueEx(nKeyOpen, sField, 0&, _
          dwType, ByVal sBuffer, nLen)
        If nResult = ERROR_SUCCESS Then
          vValue = Left$(sBuffer, nLen - 1)
        End If
 
      Case REG_DWORD
        ' DWord
        nLen = 4
        nResult = RegQueryValueEx(nKeyOpen, sField, 0&, _
          dwType, nValue, nLen)
        If nResult = ERROR_SUCCESS Then vValue = nValue
    End Select
 
    ' Schließen
    RegCloseKey nKeyOpen
  End If
 
  GetValue = (nResult = ERROR_SUCCESS)
End Function
' Pfad anhand Klassennamen auslesen
Public Function GetClassPath(ByVal sClass As String)
  Dim sValue As String
  Dim sPath As String
 
  If GetValue(HKEY_CLASSES_ROOT, sClass & "\Clsid", "", sValue) Then
    sPath = "CLSID\" & sValue
    If GetValue(HKEY_CLASSES_ROOT, sPath, "", sValue) Then
      sPath = sPath & "\InprocServer32"
      If GetValue(HKEY_CLASSES_ROOT, sPath, "", sValue) Then
        GetClassPath = sValue
      End If
    End If
  End If
End Function

Beispiel:
Sie möchten wissen, in welchem Verzeichnis sich die DAO 3.6 DLL befindet.

Dim sPath As String
sPath = GetClassPath("DAO.DBEngine.36")
MsgBox sPath

Oder: In welchem Verzeichnis befindet das Windows-Common-Control OCX (Version 6)?

MsgBox GetClassPath("MSComctlLib.ListViewCtrl")

Oder: ...

Sie sehen schon: wenn die ActiveX-Komponente als solche im System registriert ist, lässt sich über den jeweiligen Klassennamen sehr einfach der Pfad zur ActiveX-Datei ermitteln.
 



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.