Hallo Leute!
        
        Ich versuche mir gerade ein kleines Tool zusammenzubauen, welches es u.A. dem Nutzer ermöglicht eine zu öffnende Reg-Datei in die Windows Registry zu importieren. Dazu habe ich folgenden Code im Internet gefunden:
        
        
        Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
        "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
        
        Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias _
        "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
        
        Private Type OPENFILENAME
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As Long
        nFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpstrInitialDir As String
        lpstrTitle As String
        flags As Long
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
        End Type
        
        Private Const OFN_HIDEREADONLY = &H4
        Private Const OFN_PATHMUSTEXIST = &H800
        Private Const OFN_FILEMUSTEXIST = &H1000
        Private Const OFN_OVERWRITEPROMPT = &H2
        
        Function DialogOpenSave$(F As Form, ByVal ftitle$, _
        fpfad$, ByVal ffile$, ByVal ffilter$, ByVal fext$, SaveFile%)
        
        Dim O As OPENFILENAME
        Dim wSize As Long
        Dim Memhandle As Long
        
        szFile$ = ffile$ + String$(128 - Len(ffile$), 0)
        szFilter$ = ffilter$ + "||"
        Do While InStr(szFilter$, "|")
        szFilter$ = Left$(szFilter$, InStr(szFilter$, "|") - 1) + _
        Chr$(0) + Mid$(szFilter$, InStr(szFilter$, "|") + 1)
        Loop
        
        O.lStructSize = Len(O)
        O.hwndOwner = F.hWnd
        O.nFilterIndex = 1
        O.nMaxFile = Len(szFile$)
        
        Select Case SaveFile%
        Case 0:
        O.flags = OFN_HIDEREADONLY Or OFN_PATHMUSTEXIST Or _
        OFN_FILEMUSTEXIST
        Case 1:
        O.flags = OFN_HIDEREADONLY Or OFN_PATHMUSTEXIST Or _
        OFN_OVERWRITEPROMPT
        Case 2:
        O.flags = OFN_HIDEREADONLY Or OFN_PATHMUSTEXIST
        End Select
        
        O.lpstrFile = szFile$
        O.lpstrFilter = szFilter$
        O.lpstrTitle = ftitle$
        O.lpstrDefExt = fext$
        O.lpstrInitialDir = fpfad$
        
        If SaveFile% = 0 Then
        result = GetOpenFileName(O)
        Else
        result = GetSaveFileName(O)
        End If
        
        file$ = Left$(O.lpstrFile, InStr(O.lpstrFile, Chr$(0)) - 1)
        
        If result = 0 Then DialogOpenSave$ = "": Exit Function
        
        fpfad$ = Left$(file$, O.nFileOffset)
        DialogOpenSave$ = Right$(file$, Len(file$) - O.nFileOffset)
        End Function
        
        Function Dialog_Open$(F As Form, ByVal ftitle$, fpfad$, _
        ByVal ffile$, ByVal ffilter$, ByVal fext$)
        Dialog_Open$ = DialogOpenSave$(F, ftitle$, fpfad$, _
        ffile$, ffilter$, fext$, 0)
        End Function
        
        Function Dialog_Save$(F As Form, ByVal ftitle$, fpfad$, _
        ByVal ffile$, ByVal ffilter$, ByVal fext$)
        Dialog_Save$ = DialogOpenSave$(F, ftitle$, fpfad$, _
        ffile$, ffilter$, fext$, 1)
        End Function
        
        Private Sub Command1_Click()
        p$ = CurDir$ 'Vorgabe-Pfad
        F$ = "" 'Vorgabe-Datei
        a$ = Dialog_Open$(Me, "Datei öffnen", p$, F$, _
        "Text-Dateien|*.txt|Alle Dateien|*.*", "txt")
        If Right$(p$, 1) "\" Then p$ = p$ + "\"
        If Len(a$) Then MsgBox p$ + a$
        End Sub
        
        Private Sub Command2_Click()
        p$ = CurDir$ 'Vorgabe-Pfad
        F$ = "test.txt" 'Vorgabe-Datei
        a$ = Dialog_Save$(Me, "Datei speichern", p$, F$, _
        "Text-Dateien|*.txt|Alle Dateien|*.*", "txt")
        If Right$(p$, 1) "\" Then p$ = p$ + "\"
        If Len(a$) Then MsgBox p$ + a$
        End Sub
        
        Private Sub Form_Load()
        Command1.Caption = "Öffnen..."
        Command2.Caption = "Speichern..."
        End Sub
        
        Diesen Code habe ich ein wenig modifizert, weil ich ja nur Dateien öffnen will und nichts speichern und damit ich damit statt TXT-Dateien REG-Dateien öffnen kann. Das funktioniert soweit auch.
        
        Will ich die geöffnete Reg-Datei aber dann mit dem Befehl TaskID = Shell("C:\WINDOWS\regedit.exe " + p$ + a$) in die Windows Registry schreiben lassen, kommt die Fehlermeldung vom Registrierungseditor, dass die Datei fehlerhaft ist. Das Problem liegt darin, dass der Pfad bei dem ersten Leerzeichen in einem Ordnernamen abgebrochen wird. (Beispiel: Aus C:\Eigene Dateien\Registry 001.reg wird dann C:\Eigene) Kann mir da jemand weiterhelfen.
        
        Außerdem möchte ich anstelle des Pfads C:\Windows gern die von Windows dafür vorgegebene Umgebungsvvariable %windir% nutzen. Kann mir auch da jemand sagen, wie man das Visual Basic beibringt.
        
        Als letztes möchte ich noch einen Button einfügen, mit dem man eine Reg-Datei, wie oben beschrieben, öffnen kann, um sie zu löschen. Hat da auch jemand eine Tipp für einen einfachen Quell-Code?
        
        Vielen Dank schon einmal im Voraus.
        
        Grüße,
        Mic2004.
      
 
      
 Borlander
Borlander Mic2004
Mic2004
