Ich benötige bspw. die Information "Länge" zu einem Audio- oder Videofile. Diese Daten kann man nicht über FileInfo bekommen. Die Lösung zu diesem Problem fand ich auf folgendem Link, die ich programmtechnisch noch etwas erweitert habe, und die ich mittlerweile gut praktisch anwende. Hier der originale Link: Benötigt wird noch der Verweis auf COM Microsoft Shell Controls And Automation. Der Code: Friend Class ShellInfo Public Property Name As String Public Property Value As String Public Property Index As Short Public Sub New(n As String, v As String, x As Short) Name = n Value = v Index = x End Sub Public Overrides Function ToString() As String Return Name End Function End Class ''' <summary> ''' Ermitteln der aller oder eines Teils der ShellInfos eines Files ''' </summary> ''' <param name="filepath">der Filename inkl. Pfad</param> ''' <param name="theFilter">ein Filter, zum ermitteln spezieller Infos</param> ''' <returns>die Liste der ShellInfos</returns> ''' <param name="Of"></param> Public Function GetXtdShellInfo(filepath As String, Optional theFilter As Array = Nothing) _ As List(Of ShellInfo) Dim xxx As New List(Of ShellInfo) Dim shell As New Shell32.Shell, shFolder As Shell32.Folder shFolder = shell.NameSpace(Path.GetDirectoryName(filepath)) Dim key As String, ndx As Short For Each s As Object In shFolder.Items If shFolder.GetDetailsOf(s, 0).ToLowerInvariant _ = Path.GetFileName(filepath).ToLowerInvariant Then ndx = 0 key = shFolder.GetDetailsOf(shFolder.Items, ndx) ' Je nach Betriebssystem gibt es eine unterschiedliche Anzahl an Einträgen ' (Bspw. W7=290, W8=309, ebenso W=11 mit einigen Lücken.) ' Dies sollte bis zu 310 nicht leere Elemente ergeben Do Until String.IsNullOrEmpty(key) AndAlso ndx > 310 If String.IsNullOrEmpty(key) = False Then If Not IsNothing(theFilter) Then If Array.IndexOf(theFilter, key) >= 0 Then xxx.Add(New ShellInfo(key, shFolder.GetDetailsOf(s, ndx), ndx)) End If Else xxx.Add(New ShellInfo(key, shFolder.GetDetailsOf(s, ndx), ndx)) End If End If ndx += 1 key = shFolder.GetDetailsOf(shFolder.Items, ndx) If key <> "" Then Debug.Print((ndx - 1) & vbTab & key) Loop Exit For End If Next Return xxx End Function
In der Anwendung: Dim xtd As List(Of ShellInfo) Dim shellFilter() As String = {"Bildbreite", "Bildhöhe", "Länge"} ' für ein Video ... xtd = GetXtdShellInfo("myFile", shellFilter) Dieser Tipp wurde bereits 1.218 mal aufgerufen.
Anzeige
![]() ![]() ![]() Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevZIP40 Pro DLL ![]() Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Tipp des Monats ![]() Manfred Bohn IndexOf für mehrdimensionale Arrays Die generische Funktion "IndexOf" ermittelt das erste Auftreten eines bestimmten Wertes in einem n-dimensionalen Array TOP Entwickler-Paket ![]() TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |