Tipp 0370 Pfad einer DLL/ActiveX-Komponente ermitteln
Autor/Einsender:
Datum:
  Florian Platzer
20.02.2005 (Update)
Entwicklungsumgebung:   VB 6
Haben Sie sich auch schon einmal gefragt, wie man prüfen kann, in welchem Verzeichnis sich eine bestimmte DLL oder ActiveX-Komponente befindet?
Hierzu braucht man lediglich den Klassennamen der Komponenten zu wissen. Ist die DLL oder ActiveX-Komponente bereits auf dem System installiert und registriert, legt Windows den dazugehörigen Pfad in der System-Registrierung ab.
Code im Codebereich des Moduls
 
Option Explicit

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

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 Const ERROR_SUCCESS = &H0

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 = &H1

Public Function GetCompPath(ByVal strKlasse As String) As String
  Dim nRetVal    As Long
  Dim hKey       As Long
  Dim strBuffer  As String

  Dim strClassID As String

  nRetVal = RegOpenKeyEx(HKEY_CLASSES_ROOT, strKlasse & _
                              "\CLSID", 0, KEY_READ, hKey)

  If nRetVal = ERROR_SUCCESS Then
    strBuffer = Space$(512)
    nRetVal = RegQueryValueEx(hKey, vbNullString, _
          0, REG_SZ, ByVal strBuffer, Len(strBuffer))

    If nRetVal = ERROR_SUCCESS Then
      strClassID = Left$(strBuffer, _
                    InStr(1, strBuffer, Chr$(0)) - 1)

      nRetVal = RegOpenKeyEx(HKEY_CLASSES_ROOT, "CLSID\" & _
            strClassID & "\InprocServer32", 0, KEY_READ, hKey)

      If nRetVal = ERROR_SUCCESS Then
        strBuffer = Space$(512)
        nRetVal = RegQueryValueEx(hKey, vbNullString, _
              0, REG_SZ, ByVal strBuffer, Len(strBuffer))

        If nRetVal = ERROR_SUCCESS Then
          GetCompPath = Left$(strBuffer, _
                         InStr(1, strBuffer, Chr$(0)) - 1)
        End If
      End If
    End If
  End If

  RegCloseKey hKey
End Function
 
Beispiel-Aufruf
 
Dim strPath As String

strPath = GetCompPath("DAO.DBEngine.36")
If Len(strPath) = 0 Then
  strPath = "Diese DLL oder ActiveX-Komponente ist " & _
                "nicht vorhanden!"
End If
MsgBox strPath
 
Hinweis für VBA-Anwender
Die im Download befindliche *.bas-Datei kann für die Verwendung in einem (Office-)Programm im VB-Editor des entsprechenden Programms importiert werden. Ein Import der im Download enthaltenen *.frm-Datei ist nicht möglich.
Weitere Links zum Thema
Pfad der Anwendung korrekt ermitteln

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (3,9 kB) Downloads bisher: [ 850 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 28. August 2011