Installationspfad ermitteln

Hallo,
im Netz gibt es viele Beispiele, wie man mit VBA einen Wert in der Registry ermitteln kann. Leider erzielten diese Beispiele bei mir nicht den erwünschten Erfolg, da ich gerne einen eingetragenen Installationspfad ermitteln möchte (z.B. wo der Adobe Reader installiert ist. Den HKEY_CLASSES_ROOT-Pfad kenn ich).

Die Beispiele geben immer einen Long-Wert zurück, ich müßte aber ja einen String-Wert erhalten, oder?

Würde mich freuen, wenn mir jemand helfen könnte.

Gruß Olli

Hi!
Bei mir steht er unter
HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Acrobat Reader\6.0\InstallPath

Gruß.Timo Engel

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hey,
ich hab auch grad gesehen, daß der Pfad in verschienen „Klassen“ eingetragen wurde. Aber wie kann ich den String-Wert auslesen? Wie gesagt, ich kenne nur die Methoden, mit denen man einen Long-Wert auslesen kann aus der Registry, der mir hier aber nicht weiterhilft.

Gruß Olli

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

da du dazu ohnehin API-Zugriffe brauchst, empfehle ich dazu das Tool API-Guide (http://www.allapi.net/). Dort gibt es dann neben der Aufrufsyntax auch recht umfassende Beispiele, unter anderem eben auch über Zugriffe auf die Registry, welche ich dir dazu nahe legen würde.

Falls du das ganze Tool nicht runterladen willst, hier mal das Beispiel zum Thema Registry aus besagtem Tool:

'This program needs 3 buttons
Const REG\_SZ = 1 ' Unicode nul terminated string
Const REG\_BINARY = 3 ' Free form binary
Const HKEY\_CURRENT\_USER = &H80000001
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, 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 RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String) As String
 Dim lResult As Long, lValueType As Long, strBuf As String, lDataBufSize As Long
 'retrieve nformation about the key
 lResult = RegQueryValueEx(hKey, strValueName, 0, lValueType, ByVal 0, lDataBufSize)
 If lResult = 0 Then
 If lValueType = REG\_SZ Then
 'Create a buffer
 strBuf = String(lDataBufSize, Chr$(0))
 'retrieve the key's content
 lResult = RegQueryValueEx(hKey, strValueName, 0, 0, ByVal strBuf, lDataBufSize)
 If lResult = 0 Then
 'Remove the unnecessary chr$(0)'s
 RegQueryStringValue = Left$(strBuf, InStr(1, strBuf, Chr$(0)) - 1)
 End If
 ElseIf lValueType = REG\_BINARY Then
 Dim strData As Integer
 'retrieve the key's value
 lResult = RegQueryValueEx(hKey, strValueName, 0, 0, strData, lDataBufSize)
 If lResult = 0 Then
 RegQueryStringValue = strData
 End If
 End If
 End If
End Function
Function GetString(hKey As Long, strPath As String, strValue As String)
 Dim Ret
 'Open the key
 RegOpenKey hKey, strPath, Ret
 'Get the key's content
 GetString = RegQueryStringValue(Ret, strValue)
 'Close the key
 RegCloseKey Ret
End Function
Sub SaveString(hKey As Long, strPath As String, strValue As String, strData As String)
 Dim Ret
 'Create a new key
 RegCreateKey hKey, strPath, Ret
 'Save a string to the key
 RegSetValueEx Ret, strValue, 0, REG\_SZ, ByVal strData, Len(strData)
 'close the key
 RegCloseKey Ret
End Sub
Sub SaveStringLong(hKey As Long, strPath As String, strValue As String, strData As String)
 Dim Ret
 'Create a new key
 RegCreateKey hKey, strPath, Ret
 'Set the key's value
 RegSetValueEx Ret, strValue, 0, REG\_BINARY, CByte(strData), 4
 'close the key
 RegCloseKey Ret
End Sub
Sub DelSetting(hKey As Long, strPath As String, strValue As String)
 Dim Ret
 'Create a new key
 RegCreateKey hKey, strPath, Ret
 'Delete the key's value
 RegDeleteValue Ret, strValue
 'close the key
 RegCloseKey Ret
End Sub
Private Sub Command1\_Click()
 Dim strString As String
 'Ask for a value
 strString = InputBox("Please enter a value between 0 and 255 to be saved as a binary value in the registry.", App.Title)
 If strString = "" Or Val(strString) \> 255 Or Val(strString) 

Daniel

Hallo Olli,

http://www.vbarchiv.net/archiv/tipp_907.html

da siehst du wie man einen schluessel aus der registry ausliesst ohne grossen Aufwand :smile:

MFG Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,
danke allen für Eure Hilfe. Habe bei aboutvb.de unter dem Tipp System/Nr. 0548 das richtige gefunden.

Mein Fehler war allerdings, daß ich beim Auslesen des Pfades noch einen evntuellen Eintrag angegeben habe (obwohl es ja nur einen gab).

Mein Ziel war es eigentlich nur, den Inhalt eines nicht geschützen pdf-files auslzulesen. und da beim kopieren sonst die werte nicht 1:1 aus dem pdf-file ausgelesen werden konnten (nur ab der version 7.0 ist das nun endlich möglich), wollte ich nur testen, ob der nutzer auch den reader 7.0 installiert hat.

gruß olli