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.033 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats November 2024 Dieter Otter WAVE-Dateien aufnehmen Ein Code-Ausschnitt, mit dem sich WAVE-Dateien in verschiedenen Aufnahmequalitäten aufnehmen lassen. sevAniGif (VB/VBA) Anzeigen von animierten GIF-Dateien Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. |
||||||||||||||||
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. |