Datei Icon übernehmen
-
Hallo zusammen,
in meiner Anwendung erlaube ich dem Anwender beliebige Dateien, Anwendungen oder Ordner per Drag and Drop einer Liste hinzuzufügen.
Um eine bessere Übersicht zu gewährleisten, möchte ich dass meine Anwendung das Icon der jeweiligen Datei ebenfalls übernimmt.
Zur Darstellung der verschiedenen Dateien verwende ich die .Net Komponente ListView, die die Darstellung von kleinen Bitmaps unterstützt.
Ist es möglich das Icon einer Datei auszulesen und in meiner ListView für die entsprechende Datei anzuzeigen?
Ich freue mich über jede Hilfe und Denkanstoße.
Gruß!
-
RandomUserName schrieb:
Ist es möglich das Icon einer Datei auszulesen und in meiner ListView für die entsprechende Datei anzuzeigen?
Ja.
Allerdings ist mir nicht bekannt, wie man sowas direkt mit .Net machen kann. Über die WinAPI geht es allerdings und daher in .Net mit P/Invoke auch. Schau dir dazu
SHGetFileInfo
an. In den Kommentaren darunter findest du Hilfe für die Benutzung über P/Invoke. Weitere Hilfe zu P/Invoke für diese Funktion findest du hier.In WinForms kannst du dann die
Icon
Klasse verwenden. Diese hat eine statische MethodeFromHandle
.Für WPF gibt es in der Klasse
System.Windows.Interop.Imaging
die statische MethodeCreateBitmapSourceFromHIcon
.Vergiss nicht, dass du
DestroyIcon
selber aufrufen musst, wenn du das Icon nicht mehr benötigst.Grüssli
-
Hi Dravere,
danke für die Info. Bin leider noch nicht dazu gekommen es auszuprobieren. Sobald ich meine Erfahrung damit gemacht habe, schreibe ich ein Feedback.
-
Du hast Glück!
Genau diese Aufgabe habe ich gestern zuhause gemacht
Wenn ich heute da wieder bin kann ich gerne die Source posten!gruß
EDIT: habe es zwar etwas abgewandelt aber so kannst du das lösen:
private void DisplayItems(string path) { System.IO.DirectoryInfo di = new DirectoryInfo(path); foreach (System.IO.FileInfo file in di.GetFiles()) { string key = file.Extension; switch (key.ToUpperInvariant()) { case ".EXE": case ".LNK": key = System.IO.Path.GetFileNameWithoutExtension(file.FullName); break; } if (!this.imageList1.Images.Keys.Contains(key)) { this.imageList1.Images.Add(key, System.Drawing.Icon.ExtractAssociatedIcon(file.FullName)); } int index = this.imageList1.Images.Keys.IndexOf(key); ListViewItem item = new ListViewItem(); item.Text = file.Name; item.ImageIndex = index; item.Tag = file; this.listView1.Items.Add(item); } }
Quelle:
http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/81035abd-eb59-4a02-a3c6-d51239285607
-
Hi teddds,
super Klasse! Vielen Dank.