22

IShellIconOverlayIdentifierインターフェイスを使用してファイルとフォルダーにオーバーレイ アイコンを表示する Windows シェル拡張機能があります。私の拡張機能はTortoiseCVSTortoiseSVNに少し似ています。

時々、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 を頭上で叩くようなものです。これにより、デスクトップ全体が非常に激しく更新され、開いているエクスプローラー ウィンドウのスクロール位置が失われます。もう少し暴力的でないものはありますか?

4

3 に答える 3

7

これをより良く行う方法を誰かが考えていますか?

個人的にはわかりません。あなたは同様のことを行う Tortoise プログラムに言及しているので、優れた出発点は、それらがソースで何をするかを見ることです:)

これらは、この問題を処理する関連するソース ファイルのようです。

私はRebuildIcons、それらのそれぞれの方法で次のことを指摘します。

  1. シェル アイコンのサイズまたは色深度を一時的な値に設定する
  2. 設定変更をブロードキャストしてすべてのウィンドウを更新します
  3. シェル アイコンのサイズまたは色深度を元の値にリセットします
  4. 設定変更のブロードキャストですべてのウィンドウをもう一度更新します

おそらく、これは XP で動作させるための秘訣の一部です。

于 2009-03-15T12:49:50.603 に答える
0

spy++ を使用して、Windows エクスプローラーで F5 を押したときに送信される WM_COMMMAND メッセージを確認するか、表示/更新に使用されるメニュー メッセージを見つけます。

次に、FindWindow を使用して必要なエクスプローラー ウィンドウを取得し、以前に記録した WM_COMMAND などのメッセージをそれに送信します。

これは、あらゆる種類の Windows プログラムを制御する楽しい方法です。

于 2009-03-15T13:17:39.697 に答える
0

F5 キーコードを含む WM_KEYDOWN メッセージを、開いているすべてのエクスプローラー ウィンドウに送信することもできます。ただし、これはちょっとしたハックです。

于 2013-04-30T23:10:36.733 に答える