Ich will auf die Registry zugreifen -> installierte Quellcodeverwaltungssysteme.
Wenn eins da ist funktioniert es ganz gut.
Problem: wenn keine Installiert ist sollte eigentlich folgende Meldung kommen:
" keine Quellcodeverwaltung installiert " aber es kommt Run-Time Error " 13 "
Type mismatch
Was ist falsch am Quellcode ?
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 RegEnumValue Lib "advapi32.dll" _
Alias "RegEnumValueA" (ByVal hKey As Long, _
ByVal dwIndex As Long, ByVal lpValueName As String, _
lpcbValueName As Long, ByVal lpReserved As Long, _
lpType As Long, lpData As Byte, lpcbData As Long) _
As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal hKey As Long) As Long
Public Const HKEY_LOCAL_MACHINE = &H80000002
Const KEY_QUERY_VALUE = &H1
Const REG_SZ = 1
Const ERROR_SUCCESS = 0
' Ermitteln aller Schlüsselnamen eines Registry-Zweigs
Public Function Reg_GetAllKeys(ByVal hKey As Long, _
ByVal Ordner As String) As Variant
Dim SCCProviderName As String
Dim Handle As Long
Dim Ergebnis As Long
Dim Anzahl As Integer
Dim tmp(0 To 254) As Byte
ReDim alleSCCP(0) As String
' Registry-Zweig öffnen
Ergebnis = RegOpenKeyEx(hKey, Ordner, 0&, KEY_QUERY_VALUE, Handle)
If Ergebnis = ERROR_SUCCESS Then
Anzahl = 0
Do
SCCProviderName = Space(255)
Ergebnis = RegEnumValue(Handle, Anzahl, SCCProviderName, _
Len(SCCProviderName), 0&, 0&, tmp(0), 256)
If Ergebnis <> ERROR_SUCCESS Then Exit Do
' Schlüsselname
SCCProviderName = Left$(SCCProviderName, InStr(SCCProviderName, _
vbNullChar) - 1)
ReDim Preserve alleSCCP(Anzahl)
alleSCCP(Anzahl) = SCCProviderName
' Zähler um eins erhöhen
Anzahl = Anzahl + 1
Loop
End If
Call RegCloseKey(hKey)
If alleSCCP(0) <> "" Then
Reg_GetAllKeys = alleSCCP
Else
Reg_GetAllKeys = ""
End If
End Function Form1
Private Sub Command1_Click()
Dim alleSCCP() As String
Dim I As Integer
alleSCCP = Reg_GetAllKeys(HKEY_LOCAL_MACHINE, _
"Software\SourceCodeControlProvider\InstalledSCCProviders")
If IsArray(alleSCCP) Then
For I = 0 To UBound(alleSCCP)
Label1.Caption = alleSCCP(I)
Next I
Else
Label1.Caption = " keine Quellcodeverwaltung installiert "
End If
End Sub Bitte verweist mich nicht auf eure Tips&Tricks bzw API Referenz, da hab ich ja den Code in ähnlicher Form her.
Vielen dank im voraus |