# Registry



## TheLuCKer (31. Oktober 2004)

Hallo,

kann mir einer sagen, wie ich es schaffe, dass ich einen Einrag in der Registry lösche. Also ich speichere einen Eintrag mit dem folgedem Befehl:

    SaveSetting "MasterSend", "Passwort", "PassWort", frmLogin.txtPassword.Text

Jetzt möchte ich diesen Eintrag löschen, wenn ich auf einem Button klicke (Command1)

Bitte helft mir! WICHTIG

LuCKer


----------



## Merlin_78 (31. Oktober 2004)

Vieleicht hilft dir da die API "RegDeleteValue" weiter


----------



## TheLuCKer (1. November 2004)

ich weiß nicht, kannst du mir vielleicht ein Beispiel oder so schreiben, dass ich es in mein pro einsetzten kann. bin ziemlich neu in registry-part, aber es wäre wirklich wichtig. ich hab das schonmal wo gelesen:

DeleteSetting appname, section [,key]

für Speichern:

SaveSetting appname, section, key, setting

Bei mir schaut das Speichern dann so aus:

SaveSetting "MasterSend", "Passwort", "PassWort", frmLogin.txtPassword.Text

, aber kann mir dann keiner beim LÖSCHEN helfen, bitte

LUCKER


----------



## Merlin_78 (1. November 2004)

Eintrag löschen mit DeleteSetting:

1.) kompletter Zweig:
DeleteSetting "MasterSend"

2.) Sektion löschen: 
DeleteSetting "MasterSend", "Passwort"

3.) Schlüssel löschen
DeleteSetting "MasterSend", "Passwort", "PassWort"

Bei deiner Methode ist die Wurzel für den Speicherort, in dem du die Daten ablegen willst, vorgegeben. 
HKEY_CURRENT_USER\Software\VB and VBA Program Settings

Wenn du an beliebiger Position Einträge erstellen oder neue Zweige einfügen willst, kannst du das soviel ich weis, nur über API's steuern.


----------



## TheLuCKer (1. November 2004)

DANKE, aber was ist API


----------



## herberta (4. November 2004)

API steht für Applikation Programming Interface. Das sind fertige Programmteile, die für die Nutzung anderer Programme zur Verfügung stehen. In Windows liegen die DLLs im System32 Ordner.

 Hier eine Beispielfunktion, die in der Registry ließt. In den Declarationen, die im allgemeinen Programmteil stehen, kannst Du sehen, welche DLLs genutzt werden. Kopier dir alles in einen Editor, da ist es leichter zu lesen.

  'API-Deklarationen
  '
  '
  ' WINDOWS-REGISTRY bearbeiten
  '
 Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
 Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
 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
 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 ' Note that if you declare the lpData parameter as String, you must pass it By Value.
  Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
 Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
 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 ' Note that if you declare the lpData parameter as String, you must pass it By Value.
  '
  'Konstanten-Deklarationen
  Public Const REG_SZ = 1
  Public Const REG_DWORD = 4
  Public Const KEY_QUERY_VALUE = &H1
  Public Const KEY_ALL_ACCESS = 63
  Public Const HKEY_CLASSES_ROOT = &H80000000
  Public Const HKEY_CURRENT_USER = &H80000001
  Public Const HKEY_LOCAL_MACHINE = &H80000002
  Public Const HKEY_USERS = &H80000003
  Public Const REG_OPTION_VOLATILE = 1
  Public Const REG_OPTION_NON_VOLATILE = 0


  Public Sub REGISTRY_READ()
      Dim Puffer As String
      Dim Länge As Long
      Dim RWert As Long
      Dim Handle As Long
      Dim Eintrag As String

      '*
      '* REGISTRY lesen
      '*
      '*Schlüssel "Software\TEST\FTPMGMT"
      '*im Hauptschlüssel HKEY_LOCAL_MACHINE öffnen.
      'RWert = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\TEST\FTPMGMT", 0, KEY_QUERY_VALUE, Handle)

      '*
      '*Puffervariable anlegen
      '*
      Puffer = String(255, 0)
      Länge = Len(Puffer)
      '*

      '* Schlüssel freigeben
      'RWert = RegCloseKey(Handle)

      '*
      '*TEST_GLOBAL - REGISTRY lesen
      '*
      '*Schlüssel "Software\TEST\TEST_GLOBAL"
      '*im Hauptschlüssel HKEY_LOCAL_MACHINE öffnen.
      RWert = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\TEST\TEST_GLOBAL", 0, KEY_QUERY_VALUE, Handle)
      'Puffervariable anlegen
      Puffer = String(255, 0)
      Länge = Len(Puffer)
      'Wert des Zeichenfolgen-Eintrags 'Personal' lesen (Puffervariable 'By Value' übergeben!)
      RWert = RegQueryValueEx(Handle, "DNS_NAME", 0, REG_SZ, ByVal Puffer, Länge)
      'Falls Aktion erfolgreich, dann...
      If RWert = 0 Then
          '... Wert aus Puffervariable isolieren
          DNS_NAME = Left(Puffer, Länge)
          'Wert anzeigen
          'Text1.Text = "Ordner für persönliche Dokumente: " & Eintrag
      End If
      Puffer = String(255, 0)
      Länge = Len(Puffer)
      RWert = RegQueryValueEx(Handle, "DNS_USER", 0, REG_SZ, ByVal Puffer, Länge)
      'Falls Aktion erfolgreich, dann...
      If RWert = 0 Then
          '... Wert aus Puffervariable isolieren
          DNS_USER = Left(Puffer, Länge - 1)
          'Wert anzeigen
          'Text1.Text = "Ordner für persönliche Dokumente: " & Eintrag
      End If
      Puffer = String(255, 0)
      Länge = Len(Puffer)
      RWert = RegQueryValueEx(Handle, "DNS_PWD", 0, REG_SZ, ByVal Puffer, Länge)
      'Falls Aktion erfolgreich, dann...
      If RWert = 0 Then
          '... Wert aus Puffervariable isolieren
          DNS_PWD = Left(Puffer, Länge - 1)
          'Wert anzeigen
          'Text1.Text = "Ordner für persönliche Dokumente: " & Eintrag
      End If
      Puffer = String(255, 0)
      Länge = Len(Puffer)
      RWert = RegQueryValueEx(Handle, "HOST_NAME", 0, REG_SZ, ByVal Puffer, Länge)
      'Falls Aktion erfolgreich, dann...
      If RWert = 0 Then
          '... Wert aus Puffervariable isolieren
          SERVNAME = Left(Puffer, Länge - 1)
          'Wert anzeigen
          'Text1.Text = "Ordner für persönliche Dokumente: " & Eintrag
      End If
      Puffer = String(255, 0)
      Länge = Len(Puffer)
      RWert = RegQueryValueEx(Handle, "logfilepath", 0, REG_SZ, ByVal Puffer, Länge)
      'Falls Aktion erfolgreich, dann...
      If RWert = 0 Then
          '... Wert aus Puffervariable isolieren
          LOG_PATH = Left(Puffer, Länge - 1)
          'Wert anzeigen
          'Text1.Text = "Ordner für persönliche Dokumente: " & Eintrag
      End If
      'Schlüssel freigeben
      RWert = RegCloseKey(Handle)

  End Sub

 Natürlich gibt es diese Schlüssel nicht auf Deinem Rechner, aber anhand der Beispiele kannst Du Dir da was zusammenbauen was funktioniert. Wie man dann diese API zum Schreiben oder löschen nimmt, musst Du ausprobieren (oder in der MSDN Library nachsehen).

  Viel Glück


----------

