IShellIconOverlayIdentifierインターフェイスを使用してファイルとフォルダーにオーバーレイ アイコンを表示する Windows シェル拡張機能があります。私の拡張機能はTortoiseCVSやTortoiseSVNに少し似ています。
時々、Windows Explorer にすべてのアイコンを再描画させる必要があります。これを行うには、次のようにSHChangeNotifyを呼び出します。
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL)
これにより、開いているエクスプローラー ウィンドウのデスクトップと右側のペインが更新されます。エクスプローラ ウィンドウの左側にあるフォルダ ツリーは更新されません。
そこで、次のようにWM_SETTINGCHANGEを送信してみました:
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)
Vista では、これによりフォルダ ツリーが更新されますが、右側のペインは更新されません。
SHChangeNotify()
後に続くの組み合わせはWM_SETTINGCHANGE
、Vista では非常にうまく機能するようです。しかし、XPでフォルダツリーが表示されている場合、まだ更新できません。
これをより良くする方法を誰かが考えていますか?
XPのより良い解決策はありますか?
送信SHCNE_ASSOCCHANGED
は、Explorer を頭上で叩くようなものです。これにより、デスクトップ全体が非常に激しく更新され、開いているエクスプローラー ウィンドウのスクロール位置が失われます。もう少し暴力的でないものはありますか?