5

KDESC4の酸素の外観が本当に気に入りました。これらのアイコンをウィンドウに適用するプログラムを作成しました。プログラムはNSISで書かれており、現在ほぼ完全に機能しています。ただし、Windowsにアイコンの変更を認識させる唯一の方法は、explorer.exeを強制終了し、アイコンキャッシュを削除して、explorer.exeを再生成することです。SHChangeNotifywithSHCNE_ASSOCCHANGEDは、コントロールパネルアイコンやマイコンピュータアイコンなどの変更をWindowsに認識させることができないようです。これらの変更をWindowsに認識させるための、より適切で残酷でないアプローチを提案してください。

編集:これを実行できるように見えるIcon Tweakerというプログラムを見つけましたが、これはクローズドソースであるため、どのように実行するのかわかりません。(IconTweaker:http ://www.crystalxp.net/galerie/en.id.83-icontweaker.html )

編集:アンダースの返事のおかげで、私はこれがうまく機能しています(以下を参照)。ただし、他の誰かが必要とする場合に備えて、作業中のNSISコードをここに配置します

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

Shell Icon Size$ 0レジスタは、の値を格納するために使用されますHKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics。次に、値をインクリメントしてaを実行しSendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 100000, NULL)、続いてデクリメントして再送信します。

編集:ボーナスとして、これはWindows XPでより大きな(Windows 7サイズの)デスクトップアイコンを取得するためのハックとして使用できます。値を2倍にしShell Icon Sizeて呼び出しますSendMessage(サイズを復元する2番目の変更は実行しないでください)

4

2 に答える 2

7

次のコマンドラインを実行するだけです。

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

そのコマンドラインは、エクスプローラーを再起動せずにキャッシュアイコンを削除します

于 2013-12-18T13:52:51.033 に答える
5

SystemParametersInfo()には、MSDNによると「システムアイコンをリロードする」SPI_SETICONSというパラメータがあります。私はSPI_SETICONSを使用しようとしたことがないので、それが機能するかどうかはわかりません。テストしたい場合は、次のようなものを使用します。

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

これでは不十分であることが判明した場合は、文書化されていない大きなハンマーを引き出すことができます。

  1. HKEY_CURRENT_USER \ Control Panel \ Desktop \ WindowMetricsで「ShellIconSize」という名前のREG_SZ値を読み取ります(値がない場合は、中止するか、GetSystemMetrics(SM_CXICON)を使用します)
  2. ステップ1で得た数から1を引きます
  3. 変更したエントリをレジストリに書き戻します
  4. SendMessageTimeout(HWND_BROADCAST、WM_SETTINGCHANGE、SPI_SETNONCLIENTMETRICS、0、SMTO_ABORTIFHUNG、100000、NULL)を呼び出します
  5. ステップ1のエントリから取得した番号をレジストリに書き戻します
  6. SendMessageTimeout(HWND_BROADCAST、WM_SETTINGCHANGE、SPI_SETNONCLIENTMETRICS、0、SMTO_ABORTIFHUNG、100000、NULL)を呼び出します

これにより、[自動配置]がオフになっている場合でも、デスクトップアイコンが再配置される可能性があり、ユーザーを煩わせる可能性があることに注意してください。

于 2010-07-14T08:36:48.863 に答える