Autor Beitrag
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mo 10.12.12 22:14 
Abend :)

Ich hab hier eine Methode (Quelle weiß ich leider nicht mehr):

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
    internal static class FileInfoExtensions
    {
        public static Dictionary<stringstring> GetDetails(this FileInfo fi)
        {
            Dictionary<stringstring> ret = new Dictionary<stringstring>();
            var shl = (Shell)Activator.CreateInstance(Type.GetTypeFromProgID("Shell.Application"));
            //Shell shl = new ShellClass();
            Folder folder = shl.NameSpace(fi.DirectoryName);
            FolderItem item = folder.ParseName(fi.Name);
            for (int i = 0; i < 150; i++)
            {
                string dtlDesc = folder.GetDetailsOf(null, i);
                string dtlVal = folder.GetDetailsOf(item, i);
                if (dtlVal == null || dtlVal == ""continue;
                ret.Add(dtlDesc, dtlVal);
            }
            return ret;
        }
    }


Die liest mit Hilfe der Shell32.dll die Details aus den Eigenschaften einer Datei. Das funktioniert auch ganz wunderbar, aber ich würde auch gerne die Bild-Auflösung haben.

In den Details stehen Höhe und Breite. Zur Not reicht das zum ausrechnen ja eigentlich, soweit ich weiß.
Aber nicht einmal Höhe und Breite wird im Programm mit ausgelesen.

Weiß jemand, wie ich dennoch die Auflösung bekomme?
Ich kann/möchte nicht für einzelne Formate das regeln, weil die in meiner Sammlung bunt gemischt sind und mir reicht es ja, wenn das ausgelesen wird, solange Windows es anzeigen kann. Wenn Windows es auch nicht kennt, bleibt das halt leer, so wild ist das auch nicht.

Wenn die Info also nicht gegeben ist, ist das egal. Auch bei den bisherigen Details ist nicht immer alles gegeben, das prüfe ich intern nach und frage dann nach der Angabe durch den Nutzer und so wollte ich das auch hier machen.



Gruß


Edit: Ich hab grad meinen Irrtum entdeckt. Die Datei liest nicht die Details, sondern die allgemeinen Eigenschaften aus. Aber dennoch bleibt die Frage: Kann ich irgendwie die Auflösung von jeder Datei auslesen und wenn es keine gibt, einfach nix?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 11.12.12 11:24 
Hallo Palladin700,

laut Get a Video File’s Details Using Windows solltest du 263 bzw. 265 als Parameter für GetDetailsOf benutzen (bisher liest du ja nur bis 150). Es kann aber sein, daß für Windows 7 wieder andere Parameter gültig sind (irgendwo hatte ich auch 283 und 285 gelesen).
Palladin007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 11.12.12 15:53 
Danke für den Tipp, ich probier einfach mal alle vier aus ^^

Was bedeutet die Zahl eigentlich? Ich hab sie nur so übernommen und nicht groß geschaut, was intern passiert. ^^


PS: Der Link ist auch ganz interessant. Ich denke mal, ich übernehm das dort und erweitere die Klasse dann nach meinen Vorstellungen oder passe sie entsprechend an. ^^
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 11.12.12 16:08 
Ist der Spaltenindex (nicht der visuelle) der Spalten in der Ordneransicht. Welchen Wert du genau brauchst ist leider ordnerabhängig. Ob der Index für die Info die du wissen willst 263 oder 283 oder was auch immer ist ist nicht einfach vorhersagbar.
Palladin007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 11.12.12 17:21 
Daher ist das also in die Schleife gesetzt und dann wird geprüft, ob ein Wert vorhanden ist.

Jetzt versteh ich es, danke ^^


Edit:
Ich lass jetzt einfach bis 300 durchlaufen, dann passt das schon ^^