IconCache neu laden bzw aktualisieren.
-
Ich kann mit meinenm Programm bisher bestimmte System-Icons austauschen bzw werden die angaben in der Registry von mir geändert.
Damit das dann auch funktioniert muss dann jedes mal entweder ein neustart oder zumindest der explorer.exe neu gestartet werden.
Wie kann ich das aus dem Programm heraus ermöglichen? also ohne Neustart. Es müsste sozusagen der IconCache neu eingelesen werden von der explorer.exe
Ich hoffe jemand von euch hat da nen anhaltspunkt für mich.
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);
-
Danke für den hinweis aber leider funktioniert das so nicht.
Also das was du geschrieben hast schon und er macht ja so ungefähr das als wenn ich auf dem Desktop rechtsklicke und aktualisieren drücke aber er läd nicht den iconCache neu.
Leider
-
Wenn man die Bildschirmauflösung ändert, wird der IconCache neu geladen. Evtl kannst du dies so http://www.c-plusplus.net/forum/viewtopic-var-p-is-296748.html ähnlich machen.
-
Der Code der hier in diesem Sample in CShellIconChangerDlg::RefreshIcons
http://www.codeproject.com/KB/winsdk/nsetfoldericons.aspx
verwendet wird führt auch zum Löschen des Icon Caches.
-
zu 123:
Da funktioniert leider auch nicht.
zu Martin Richter:
Leider habe ich den BorlandBuilder 2007. Habe mir den Code mal angesehen aber komme zu keinem Erfolg. Das Problem ist, das halt meist der IconCache gelöscht wird aber dieser nicht von selbst neu geladen wird.
Neu geladen bzw aktuelle Icon Infos aus der Reg lesen passiert nur wenn zb. explorer.exe beendet wird und neu gestartet wird und wenn man zb. sich abmeldet und wieder anmeldet.
Zur genaueren Erklärung damit ihr genau wisst was ich erreichen möchte. In der Registry ist ein Wert hinterlegt wo das Icon zu finden ist für zb. den Verknüpfungspfeil.
In der Reg kann ich nun den Wert ändern auf ein anderes Icon dieses wird dann aber erst nach den von mir oben genannten Aktionen angezeigt.
Bildschirmgrösse, Icon Grösse, löschen des Caches, oder aktualisieren mit rechtsklick auf desktop ändert halt nichts. Erst der Explorer Neustart.Ich glaube das da sowas passieren muss was passiert wenn man Vista sagt das das Theme geändert wird wo er Den PC ausgraut (stoppt) mit ner meldung in der mitte das er gerade am ändern ist. Ich glaube er beendet zur Laufzeit den Explorer und startet ihn neu damit dieser alle Infos neu einliesst.
Sowas muss doch Irgendwie gehen. Wenn microsoft das kann ---- wäre doch gelacht.
Bin für jeden Ratschlag dankbar. Hinweise reichen ja auch aus ich such den rest schon selbst zusammen.
-
...Erst der Explorer Neustart....
So mach ich das immer, wenn ich etwas in der Registry geändert habe: Explorer mit tskill abschießen und neu starten.
ShellExecute (Handle, "open", "tskill" , "explorer", NULL, SW_SHOW); ShellExecute (Handle, "open", "explorer" , NULL, NULL, SW_SHOW);
-
Und was ist mit SystemParametersInfo SPI_SETICONS
-
zu 123:
Also Theoretisch würde das gehen aber wenn man zb Dreamscene laufen hat dann würde man den mit abschiessen. Währe quasi ein schlechter nebeneffekt.
zu Richter:
das sieht zumindest vielversprechend aus. Ich gebe bescheid nachdem ich das getestet habe.Robi