Laden...

folder shell icons

Erstellt von seeker vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.655 Views
S
seeker Themenstarter:in
37 Beiträge seit 2008
vor 15 Jahren
folder shell icons

hi leute, ich bin nicht der erste sicherlich, der diese frage stellt aber in google oder hier findet man nicht die lösung dazu, oder ich zumindest nicht.

wie kann man von Ordnern das Icon dazu bekommen? (also wie es im explorer angezeigt wird).

ich hab schon einiges ausprobiert:

Icon ic = System.Drawing.Icon.ExtractAssociatedIcon(@"C:\WINDOWS");

oder das "umständliche" über den SHGetFileInfo Aufruf.

Leider funktionieren alle diese Varianten nur bei Dateien und nicht bei Ordner.

nebenbei hab ich auch noch eine zweite blöde frage, beim ListView steuerelemnt kann man ja eine kleine oder große imagelist hinzufügen. wenn man jetzt eine kleine imagelist hat und ansicht auf detail, dann werden die icons schön angezeigt. will man aber jetzt "umschalten" auf keine Icons, kann ich das irgendwie nicht. die imagelist einfach auf null setzen geht zwar, aber lässt dann noch immer platz für bilder. kann ich ihm das irgendwie abgewöhnen?

System.CrashWithStop(0x0000000A);

479 Beiträge seit 2008
vor 15 Jahren

Hallo seeker,

sollten die Ordner KEIN Standard-Icon haben, befindet sich im Ordner eine versteckte Datei namens desktop.ini. Dort steht der Pfad zum Icon drin.

mfg.
markus111

[Follow me on Twitter](http://twitter.com/blendingsky)
3.511 Beiträge seit 2005
vor 15 Jahren

Hallo,

sowas erreicht man über die Shell API von Windows. Du brauchst an sich nur die Methode SHGetFileInfo. Diese rufst du mit den Pfad auf und den Parameter SHGFI_ICON. Dann bekommst du ein Handle auf ein Icon zurück und dieses kannst du dann wiederum mit Icon.FromHandle abrufen.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

S
seeker Themenstarter:in
37 Beiträge seit 2008
vor 15 Jahren

hi, danke für eure antworten.

ich hab es jetzt geschafft, mir ist nicht aufgefallen dass es doch auch mit der SHFILEINFO methode funktioniert. war gestern schon etwas spät 😉

habt ihr auch eine idee zu meinem zweiten problem? dass wenn es einmal eine imagelist in listview gegeben hat er immer den platz lässt für bilder, auch wenn diese leer sind?

System.CrashWithStop(0x0000000A);

1.665 Beiträge seit 2006
vor 15 Jahren

habt ihr auch eine idee zu meinem zweiten problem? dass wenn es einmal eine imagelist in listview gegeben hat er immer den platz lässt für bilder, auch wenn diese leer sind?

Das ist normal. Was erwartest du denn genau?

S
seeker Themenstarter:in
37 Beiträge seit 2008
vor 15 Jahren

naja ich würde gern diesen rand für die bilder weghaben. wenn ich nie eine imagelist dem listview zuweise, dann lässt er auch keinen rand. wenn ich einmal bilder angezeigt habe und dann beide imagelists (also klein und groß) auf null setze, lässt er noch immer den rand.

soll ich vielleicht das control neu erstellen?

System.CrashWithStop(0x0000000A);

691 Beiträge seit 2007
vor 15 Jahren

Wenn du in einem bestimmten Fall überhaupt keine Icons willst, dann nimm doch aus der View-Enumeration einen anderen Wert?

mit freundlichen Grüßen,
Tomot

Projekte: www.gesellschaftsspieler-gesucht.de

S
seeker Themenstarter:in
37 Beiträge seit 2008
vor 15 Jahren

also bei den verschiedenen view-eigenschaften hab ich keine veränderung festgestellt. er hat immer platz für bilder gelassen.

System.CrashWithStop(0x0000000A);

691 Beiträge seit 2007
vor 15 Jahren

Wäre View.Details was für dich?

mit freundlichen Grüßen,
Tomot

Projekte: www.gesellschaftsspieler-gesucht.de

S
seeker Themenstarter:in
37 Beiträge seit 2008
vor 15 Jahren

genau das verwende ich ja gerade. wenn dort aber einmal eben die imagelists drinnen sind, bekommt man sie nicht mehr raus 😉

System.CrashWithStop(0x0000000A);

1.665 Beiträge seit 2006
vor 15 Jahren

genau das verwende ich ja gerade. wenn dort aber einmal eben die imagelists drinnen sind, bekommt man sie nicht mehr raus 😉

ListView.Small/LargeImageList = null;

?

S
seeker Themenstarter:in
37 Beiträge seit 2008
vor 15 Jahren

ich hab ja oben bereits geschrieben: wenn ich einmal bilder angezeigt habe und dann beide imagelists (also klein und groß) auf null setze, lässt er noch immer den rand.

System.CrashWithStop(0x0000000A);

3.511 Beiträge seit 2005
vor 15 Jahren

Probier es mal über den Win32 Weg. Erst ein LVM_SETIMAGELIST mit einem IntPtr.Zero als ImageList und anschließend ein LVM_ARRANGE. Vielleicht hilft das ja.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)