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.