Windowsエクスプローラーをプログラムで更新するにはどうすればよいですか?
-
22-07-2019 - |
質問
IShellIconOverlayIdentifier を使用するWindowsシェル拡張機能があります
a>ファイルとフォルダーにオーバーレイアイコンを表示するインターフェイス。私の拡張機能は、 TortoiseCVS や TortoiseSVN 。Windowsエクスプローラーでアイコンをすべて再描画する必要がある場合があります。これを行うには、次のように 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をクラビングするようなものです。これにより、デスクトップ全体が非常に激しくリフレッシュされ、開いているエクスプローラーウィンドウがスクロール位置を失う原因になります。少し暴力的でないものはありますか?
解決
どのようにすればいいのか誰にもアイデアはありますか これは良いですか?
個人的には知りません。あなたは同様のことをするTortoiseプログラムに言及しているので、優れた出発点は、ソースで何をするかを見ることです:)
これらは、この問題を処理する関連ソースファイルのように見えます。
- TortoiseCVS -ShellUtils.cpp
- TortoiseSVN-ShellUpdater.cpp (ユーザー名: " guest&quot ;、パスワード:"")
これらのそれぞれの RebuildIcons
メソッドに注意してください:
- シェルアイコンのサイズまたは色深度を一時的な値に設定する
- 設定変更をブロードキャストすることにより、すべてのウィンドウを更新します
- シェルアイコンのサイズまたは色深度を元の値にリセットします
- 設定変更のブロードキャストですべてのウィンドウを2回更新します
これはおそらく、XPで動作させるための秘ofの一部でしょう。
他のヒント
spy ++を使用して、WindowsエクスプローラーでF5キーを押したときに送信されるWM_COMMMANDメッセージを確認するか、表示/更新に使用されるメニューメッセージを見つけます
FindWindowを使用して、目的のエクスプローラウィンドウを取得し、以前に記録したWM_COMMANDなどのメッセージを送信します。
これは、あらゆる種類のWindowsプログラムを制御する楽しい方法です。
F5キーコードを含むWM_KEYDOWNメッセージを開いているすべてのエクスプローラウィンドウに送信することもできます。ただし、これはちょっとしたハックです。