Property Dialog für mehrere Dateien und Ordner

30/12/2009 - 10:53 von Ralf Schlegel | Report spam
Hallo NG,

in einem selbstgeschriebenen Explorer-Clone möchte ich den
"Datei-Eigenschaften Dialog" nachbilden.
Dafür setze ich ShellExecuteEx API ein:

Public Sub file_properties(ByVal fName As String)
Dim ShInfo As SHELLEXECUTEINFO

With ShInfo
.cbSize = Len(ShInfo)
.fMask = &H44C
.hwnd = glbDeskHwnd
.lpVerb = "properties"
.lpFile = fName & Chr$(0)
.lpIDList = 0
End With
ShellExecuteEx ShInfo
End Sub

Anmerkung:
"glbDeskHwnd" ist ein zuvor global ermitteltes Desktop-Handle!
Ich weiß - man könnte auch '0' übergeben, das ist aber hier
nicht die Frage und auch nicht die Lösung!

MEIN PROBLEM:
Die Funktion ist okay, solange ich EINE Datei oder EIN Verzeichnis
als Parameter übergeben.
Wie kann ich aber mehrere Dateien übergeben????, sodass mir der
Eigenschaftsdialog z.B. sagt:
"475 Dateien in 3 Ordner..."

Das Internet und die MSDN schweigen sich darüber aus,
oder ich google vielleicht nicht richtig ;-)

Danke für jede Antwort

Ralf Schlegel
www.vb-zentrum.de
 

Lesen sie die antworten

#1 Timo Kunze
30/12/2009 - 12:50 | Warnen spam
Hi,

sowas geht mit SHMultiFileProperties. Aber stell dir das nicht zu
einfach vor. Du musst nàmlich als 1. Parameter deine eigene
Implementierung von IDataObject übergeben und als 2. Parameter 0.
Deine IDataObject-Implementierung muss möglichst alle beliebigen Formate
unterstützen (ganz besonders CF_HDROP), nicht nur bestimmte.
CF_HDROP ist der Grund, warum man nicht einfach die
IShellFolder-Implementierung des Desktops, absolute pIDLs und
GetUIObjectOf(IID_IDataObject) verwenden kann, denn die
IShellFolder-Implementierung des Desktops liefert für absolute pIDLs ein
IDataObject, das kein CF_HDROP bietet.
Wenn dein IDataObject nach CF_HDROP gefragt wird, muss es die
entsprechenden Daten für alle Dateien liefern, für die du den Dialog
anzeigen willst.

Noch eine Anmerkung zu deinem generellen Ziel "Explorer-Clone": Ich
hoffe, du arbeitest mit den Shell-Interfaces und pIDLs und nicht mit
Dateipfaden. Wenn du mit Dateipfaden arbeitest, ist es zwar auf den
ersten Blick erstmal einfacher, aber auf Dauer machst du dir damit nur
das Leben schwer und wirst des öfteren vor Sackgassen stehen, wo du dann
umstàndlich erst alle Pfade in pIDLs konvertierst, nur um eine bestimmte
Funktion zu implementieren.

Timo
www.TimoSoft-Software.de - Unicode controls for VB6
"Those who sacrifice freedom for safety deserve neither."
"Demokratie ist per Definition unsicher. Ihr Schutz entsteht aus der
Überzeugung, dass die demokratischen Kràfte überwiegen und sich – auf
demokratischem Wege – durchsetzen."

Ähnliche fragen