2010-07-14 2 views
5

Ich mochte das Sauerstoff Aussehen von KDE SC 4. Ich schrieb ein Programm, um diese Symbole auf Windows anwenden. Das Programm ist in NSIS geschrieben und ist derzeit nahezu voll funktionsfähig. Die einzige Möglichkeit, Windows auf die Symboländerungen aufmerksam zu machen, besteht jedoch darin, explorer.exe zu löschen, den Symbolcache zu löschen und explorer.exe neu zu starten. SHChangeNotify mit SHCNE_ASSOCCHANGED scheint nicht in der Lage zu sein Windows auf die Änderungen des Symbols Systemsteuerung, des Symbols Arbeitsplatz usw. aufmerksam zu machen. Bitte schlagen Sie einen besseren, weniger brutalen Ansatz vor, um Windows auf diese Änderungen aufmerksam zu machen.Make Windows aktualisieren Symbol Cache

BEARBEITEN: Ich habe ein Programm namens Icon Tweaker gefunden, das scheint, dies zu tun, aber es ist geschlossen Quelle und so habe ich keine Ahnung, wie es das tut. (IconTweaker: http://www.crystalxp.net/galerie/en.id.83-icontweaker.html)

EDIT: Ich habe das funktioniert gut, dank der Antwort von Anders (siehe unten). Aber ich werde einfach hier meine Arbeits NSIS Code setzen, falls jemand anderes braucht es

ReadRegStr $0 HKCU "Control Panel\Desktop\WindowMetrics" "Shell Icon Size" 
IntOp $0 $0 + 1 
WriteRegStr HKCU "Control Panel\Desktop\WindowMetrics" "Shell Icon Size" $0 
SendMessage 0xffff 0x001A 42 0 /TIMEOUT=100000 
IntOp $0 $0 - 1 
WriteRegStr HKCU "Control Panel\Desktop\WindowMetrics" "Shell Icon Size" $0 
SendMessage 0xffff 0x001A 42 0 /TIMEOUT=100000 

Das $ 0-Register verwendet wird, um den Shell Icon Size Wert von HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics zu speichern. Wir erhöhen dann den Wert und machen einen SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 100000, NULL), gefolgt von einem Dekrement und erneutem Senden.

EDIT: Als ein Bonus kann dies als ein Hack verwendet werden, um größere (Windows 7 Größe) Desktop-Icons auf Windows XP zu bekommen. verdoppeln einfach den Wert Shell Icon Size und rufen SendMessage (nicht über die zweite Änderung durchführen, die die Größe wieder herstellt)

+0

neu zu starten ich ein ähnliches Problem in einem C# Programm.Hast du das funktioniert? –

+0

Ja. Der oben angegebene Code (NSIS-Code) hat es geschafft. –

Antwort

5

SystemParametersInfo() hat einen Parameter genannt SPI_SETICONS dass „Lädt die Systemsymbole“ entsprechend MSDN. Ich habe nie versucht, SPI_SETICONS zu verwenden, so weiß ich nicht, ob es funktioniert, wenn Sie Sie testen wollte so etwas wie

System::Call 'user32::SystemParametersInfo(i 0x0058,i0,i0,i2)i' ;SPI_SETICONS 

verwenden würden, wenn sich herausstellt, dass dies nicht genug ist, können Sie die große bringen kann undokumentierte hammer:

  1. lesen REG_SZ Wert "Shell Icon Size" in HKEY_CURRENT_USER \ Control Panel \ Desktop \ Window genannt (Wenn der Wert nicht da, entweder abbrechen oder Verwendung GetSystemMetrics (SM_CXICON))
  2. subtrahieren 1 aus die Nummer, die Sie von Schritt eins erhalten haben
  3. Schreiben Sie die geänderte Eintrag zurück in die Registrierung
  4. Aufruf Sendmessagetimeout (HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 100000, NULL)
  5. die Anzahl schreiben Sie Schritt einen Eintrag zurück in die Registrierung bekam
  6. Anruf Sendmessagetimeout (HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 100000, NULL)

Beachten Sie, dass dies auch die Desktop-Icons neu anordnen können, wenn "Automatisch anordnen" ausgeschaltet ist und möglicherweise auch andere Dinge, die die Benutzer verärgern könnte!

+1

@Sudarshan S: ReadRegStr, IntOp, WriteRegStr, SendMessage 0xffff 0x001A 42 0/TIMEOUT = 100000 sind alle integrierte Befehle, System :: Call 'user32 :: GetSystemMetrics (i 11) i.r0' gibt Ihnen SM_CXICON Größe in $ 0 – Anders

4

Sie können nur die folgende Befehlszeile:

c:\Windows\System32\ie4uinit.exe -ClearIconCache 

dieser Linie wird befehlen Cache Icons ohne Notwendigkeit löschen Explorer

+0

Nicht sicher, was das tut, aber es löscht den Icon-Cache nicht. – user3690202

Verwandte Themen