VB5 und Registry

Hallo,

wie kann ich in VB5 auf die Windows Registry zugreifen bzw. erstellen, löschen oder ändern (auf irgendeinen beliebigen Schlüßel oder Pfad)? Hat jemand vielleicht eine Idee oder ein Beispiel?

1000 Dank

MfG
Keven
http://www.kevens.page.cx

Hallo,
Aus dem API-Guide (http://www.allapi.net):

'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) 

Gruß

J.

Hallo Keven,

es gibt eine sehr schöne Möglichkeit von Riposte (www.riposte.com). Dort kann man auf die Registry über eine Collection zugreifen. Stichwort: RegCol.
Leider ist diese ActiveX-DLL mittlerweile kostenpflichtig. Aber man kann eine kostenlose Evaluierungsversion herunterladen.

Anders geht es leider nur über System-DLLs.
Eine schöne Beschreibung und auch ein freies VB-Demo-Modul findest Du unter
http://www.spnc.demon.co.uk/vb/vbreg.htm

Ciao
Dirk

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

Hallo,

danke erst mal.

Nur noch eine Frage:
Er ließt nun jeden String den ich will aus, nur die Hexdezimalen und Binären Werte nicht. Wie stelle ich es an, das er auch diese Werte einließt?

MfG
Keven
http://www.kevens.page.cx

Er ließt nun jeden String den ich will aus, nur die
Hexdezimalen und Binären Werte nicht. Wie stelle ich es an,
das er auch diese Werte einließt?

???
Schau Dir doch mal den Code an:

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

Ok, die Funktion heißt RegQueryStringValue, sie liest aber Strings oder Binaries, je nachdem, was sie vorfindet
(speziell der Teil:

 ElseIf lValueType = REG\_BINARY Then
.
.
.

Bei mir funktioniert das jedenfalls einwandfrei!

Gruß

J.