AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Windows 7: Devicearrival - DeviceIcon?

Ein Thema von Mattze · begonnen am 6. Feb 2011 · letzter Beitrag vom 25. Feb 2011
Antwort Antwort
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

Windows 7: Devicearrival - DeviceIcon?

  Alt 6. Feb 2011, 11:38
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!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#2

AW: Windows 7: Devicearrival - DeviceIcon?

  Alt 6. Feb 2011, 12:53
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#3

AW: Windows 7: Devicearrival - DeviceIcon?

  Alt 6. Feb 2011, 13:59
SHGetFileIcon läuft ja über eine processeigene IconCache ... ich weiß zwar jetzt nicht wie, aber diese Cache (die SystemImageList) kann man auch irgendwie leeren
http://www.catch22.net/tuts/sysimg
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#4

AW: Windows 7: Devicearrival - DeviceIcon?

  Alt 6. Feb 2011, 14:52
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#5

AW: Windows 7: Devicearrival - DeviceIcon?

  Alt 6. Feb 2011, 15:00
Zitat:
small icons, large icons, extralarge Icons und jumboicons
Das betrifft nur die Größe der Icons, aber was den Index auf die jeweiligen Icons angeht, ist dieses egal (solange man innerhalb der selben ImageList bleibt. (Ich denk mal nicht, daß die Indize der Listen übereinstimmen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#6

AW: Windows 7: Devicearrival - DeviceIcon?

  Alt 6. Feb 2011, 15:56
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
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#7

AW: Windows 7: Devicearrival - DeviceIcon?

  Alt 25. Feb 2011, 16:17
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz