![]() |
Windows 7: Devicearrival - DeviceIcon?
Hallo,
wie bekommt man unter Windows 7 beim Devicearrival das korrekte DeviceIcon? (D7 pro) Wer jetzt SHGetFileInfo liegt falsch oder ich kann es nicht richtig! Das funktionierte unter XP problemlos, unter Windows 7 (bei mir) nicht. (Übrigens: Das Programm unter Win7 übersetzt kann es auch nicht mehr unter XP!? Und ich bilde mir ein, dass das auch unter Win 7 eine ganze Weile in Ordnung war!?) (Das gilt zumindest für USB-Sticks und externe USB-Platten. Da habe ich es probiert. Eine neue DVD im DVD-Laufwerk erkennt er korrekt und baut auch das richtige Icon ein!) Ich nehme an, dass das mit der unterschiedlichen Behandlung der Systemimagelist zusammenhängt. Das Programm bekommt auch beim DeviceChange (Devicearrival) "nur" eine Kopie und die braucht Zeit. Wenn die fertig ist, ist das Devicearrival aber meist schon abgearbeitet. Es wird nur das Standardicon angezeigt, das sich dann auch im nachinein (nochmal SHGetFileIcon) nicht mehr ändern lässt. Der Windows Explorer kann es aber richtig. (Evtl. arbeitet der mit der originalen Systemimagelist, die immer sofort aktualisiert wird.) Gibt es speziell dafür evtl. eine API-Funktion? Was tun? Gruß Mattze PS: Fälschlicherweise hatte ich da einen Thread im Verdacht, weil es ja vorher ging. Aber es geht auch ohne den Thread nicht mehr. Ich habe es mal mit einem Button direkt probiert. Da wird nur das Icon mit SHGetFileInfo geholt. Drücke ich sofort nach Anschluss des USB-Sticks (d. h. "so spät", dass das LW schon da ist), geht es nicht. Drücke ich dann später nochmal, ändert sich auch nichts. Warte ich zu Beginn einen Moment und drücke dann den Schalter, geht es! |
AW: Windows 7: Devicearrival - DeviceIcon?
SHGetFileIcon läuft ja über eine processeigene IconCache ... ich weiß zwar jetzt nicht wie, aber diese Cache (die SystemImageList) kann man auch irgendwie leeren. (also, wenn dein Programm eine DeviceChangeMessage empfängt)
Danach sollte sie sich neu aufbauen und eventuell jeweils die aktuellen Icons laden. :gruebel: |
AW: Windows 7: Devicearrival - DeviceIcon?
Zitat:
![]() |
AW: Windows 7: Devicearrival - DeviceIcon?
Hallo,
danke für die Antworten. FileIconInit macht's nicht. Das hatte ich probiert, nur vergessen zu schreiben. Shell_GetImageLists habe ich auch mal probiert. Ging auch nicht. Shell_GetImageLists gibt mir zwar die richtigen Systemimagelists zurück, aber das reicht mir ja nicht. Ich brauche ja noch die Nummer des Icons in dieser. Also ist die Frage dann, wie ich SHGetFileIcon dazu überrede, in dieser Imagelist zu suchen oder eine andere Function für die Nummer in dieser Imagelist zu nutzen. Nur welche? Dazu kommt, dass ich da etwas verunsichert bin, da Win 7 nun inzwischen 4 Systemimagelists kennt: small icons, large icons, extralarge Icons und jumboicons. Shell_GetImageLists gibt aber nur die Handle der ersten beiden zurück. (Gut, mehr brauche ich nicht, aber...) Gruß Mattze |
AW: Windows 7: Devicearrival - DeviceIcon?
Zitat:
|
AW: Windows 7: Devicearrival - DeviceIcon?
Hallo himitsu,
die Indizes scheinen tatsächlich übereinzustimmen. Ich hatte mir mal vor langer Zeit ein Programm geschrieben, was mir diese 4 Imagelisten ausliest. Da sind zwar nicht überall alle Positionen besetzt (speziell bei jumboicons), aber sie scheinen vorhanden und dann eben leer. Die, die existieren sitzen auf dem Platz mit dem gleichen Index. Nur der Index in der "Programiconlist", die SHGetFileInfo (jetzt) nutzt ist ein anderer. Diese Liste hat ja normalerweise auch eine andere Größe als die echte Systemimagelist. Nun sind wir genau beim Problem: Wie kriege ich eine Korrektur der "Programmimagelist" mit der "echten" Systemimagelist und dann die Nummer des Icons? FileIconInit(true) scheint es nicht zu machen (Ob die per Thread kopieren?) und bei geticonlists weiß ich nicht, wie ich din Iconindex in diesen zurückgelieferten Listen bekomme. Für den Index kenne ich eben nur SHGetFileinfo. Aber wie sage ich dem, in welcher Iconlist er suchen soll? Gruß Mattze |
AW: Windows 7: Devicearrival - DeviceIcon?
Hallo,
also ich packe es nicht! Alles möglich probiert. Auch ganz direkt über Interfaces... Nix!!! Shelltreeview und Shelllistview packen es auch nicht. VirtualDriveToolbar, VirtualExplorerTreeview und VirtualexolorerEasyListview können es auch nicht. Komischerweise kann es der UltraExplorer, der ja eigentlich auf den letzteren beruht. Und der Windows Explorer kann es auch. Keiner eine Idee? Gruß Mattze |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz