Liebe ExpertInnen,
ich suche eine Möglichkeit, den Benutzer einen Pfad angeben zu lassen (auf dem ich dann etliche Dateien ablegen möchte), ähnlich wie beim SaveOpenFile. Gibt es da was? Ich gestehe, dass mich der API-Guide überwältigtfordert.
Gruß Ralf
Hallo,
ich suche eine Möglichkeit, den Benutzer einen Pfad angeben zu
lassen (auf dem ich dann etliche Dateien ablegen möchte),
ähnlich wie beim SaveOpenFile. Gibt es da was? Ich gestehe,
dass mich der API-Guide überwältigtfordert.
An welcher Stelle? Aus welchem Kontext?
BOOL SetCurrentDirectory(
LPCTSTR lpPathName // pointer to name of new current directory
);
(kernlel.lib, => z.B. http://gdmike.statbuff.com/2006/07/05/win32-tip-set-… )
Grüße
CMБ
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
'Browsing for directory.
Private Const BIF\_RETURNONLYFSDIRS = &H1 'For finding a folder to start document searching
Private Const BIF\_DONTGOBELOWDOMAIN = &H2 'For starting the Find Computer
Private Const BIF\_STATUSTEXT = &H4
Private Const BIF\_RETURNFSANCESTORS = &H8
Private Const BIF\_BROWSEFORCOMPUTER = &H1000 'Browsing for Computers.
Private Const BIF\_BROWSEFORPRINTER = &H2000 'Browsing for Printers
Private Const BIF\_BROWSEINCLUDEFILES = &H4000 'Browsing for Everything
Private Const MAX\_PATH = 260
Private Type BrowseInfo
hwndOwner As Long
pIDLRoot As Long
pszDisplayName As Long
lpszTitle As Long
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type
Public Function BrowseForFolder(hwndOwner As Long, sPrompt As String) As String
'=================================================
'Opens the system dialog for browsing for a folder
'=================================================
Dim iNull As Integer
Dim lpIDList As Long
Dim lResult As Long
Dim sPath As String
Dim udtBI As BrowseInfo
With udtBI
.hwndOwner = hwndOwner
.lpszTitle = lstrcat(sPrompt, "")
.ulFlags = BIF\_RETURNONLYFSDIRS
End With
lpIDList = SHBrowseForFolder(udtBI)
If lpIDList Then
sPath = String$(MAX\_PATH, 0)
lResult = SHGetPathFromIDList(lpIDList, sPath)
Call CoTaskMemFree(lpIDList)
iNull = InStr(sPath, vbNullChar)
If iNull Then
sPath = Left$(sPath, iNull - 1)
End If
End If
BrowseForFolder = sPath
End Function
Gru0
Joey
PS: hoffe alle Deklarationen mitkopiert zu haben
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Moin, Joey,
Public Function BrowseForFolder(hwndOwner As Long, sPrompt As
String) As String
Windows habe ich nie gelernt, deshalb noch eine Frage: Wie rufe ich die Function auf?
PathSelected = BrowseForFolder( ??? , „Bitte Pfad für Druckdateien auswählen“)
sprompt ist wohl der Title der Box, aber was gebe ich für hwndOwner mit?
Gruß Ralf
ps: Woher hast Du den Code - selbst gebaut?
Moin, CMБ,
der Anwender soll selbst einen Pfad vorgeben können (wenn er mag), das muss keineswegs der Pfad sein, in dem die Applikation liegt.
Gruß Ralf
Hallo Ralf,
wenn du den API-Guide hast, ist das doch schon mal ein Schritt in die richtige Richtung.
Such dort einfach mal nach der Funktion SHBrowseForFolder. Dort gibt es dann neben den Details auch Beispielcode mit recht guten Kommentaren. Den kannst du einfach in ein VB6-Formular reinkopieren und das Ganze starten.
Damit kriegst du ein lauffähiges Beispiel und einen ersten Eindruck der Funktionsweise und kannst dann an den kommentierten Stellen gezielte Änderungen probieren um das Ergebnis deinen Vorstellungen anzupassen.
Daniel
Moin, Daniel,
Such dort einfach mal nach der Funktion SHBrowseForFolder.
Du bist ein kleiner Scherzkeks, was? Woher soll ich wissen, wie die Funktion heißt?
Gruß Ralf
Hi,
sprompt ist wohl der Title der Box, aber
was gebe ich für hwndOwner mit?
der (das?) Windows Handle. Liefert eigentlich jede Form unter MS mit mit. Eigenschaft „hwnd“ unter VB. „0“ geht aber auch.
Gruß Ralf
ps: Woher hast Du den Code - selbst gebaut?
Wer macht denn noch sowas
Natürlich kopiert und möglicherweise modifiziert im Laufe der Jahre.
Gruss
Joey
Moin, Joey,
der (das?) Windows Handle. Liefert eigentlich jede Form unter
MS mit mit. Eigenschaft „hwnd“ unter VB. „0“ geht aber auch.
das ist nicht so ganz einfach, wenn die Function, die den Pfad braucht, aus einer Menüleiste heraus aufgerufen wird. Geht aber trotzdem (durch Probieren herausgefunden): Mit dem Wert 0 als Parameter.
Inzwischen habe ich SHBrowseForFolder im API-Guide gefunden, Deine Version ist aber viel schöner 
Gruß Ralf
Hallo Ralf,
Du bist ein kleiner Scherzkeks, was? Woher soll ich wissen,
wie die Funktion heißt?
Ich bin auch nicht mit diesem Wissen auf die Welt gekommen
. Die Gruppierungsansicht im API-Guide hilft aber ungemein, wenn man was bestimmtes sucht. Zum Bleistift gibt es da die Gruppe Common Dialogs, also gebräuchliche Dialoge, und so oft wie man diesen Dialog in Windows sieht, könnte man durchaus erwarten, das er dort auftaucht.
Und außerdem habe ich’s dir ja jetzt verraten. Zweck meines Postings war u.A. dir mit dem Namen der Funktion den Weg zu weisen, den Rest brauchte ich eigentlich nicht zu schreiben, denn den kannst du ja recht komfortabel im API-Guide nachlesen.
Daniel
Moin, Daniel,
den API-Guide kenne ich, den Namen der Funktion hatte mir Joey schon verraten. Konnte man alles lesen.
Gruß Ralf