3

背景: ここを見ると: http://msdn.microsoft.com/en-us/library/ee330740%28v=vs.85%29.aspx の下部に次のように表示されます。

注: アプリケーションをアンインストールしても、その通知領域のアイコンは、コントロール パネルの [通知領域のアイコン] ページのオプションとしてユーザーに最大 7 日間表示されます。ただし、そこで行った変更は効果がありません。

はい、アプリケーションをアンインストールしても、Explorer.exe を強制終了して再起動するまで、アイコンは「通知領域のアイコン ページ」に残ります。これが私が解決したい問題です。

「通知領域アイコン ページ」(Windows 7 の場合) にアクセスするには、タスクバーを右クリック > [プロパティ] > [カスタマイズ] を選択します。

したがって、私がやりたいことは、そのリストからアイコンをプログラムで削除するか、すべてのアイコンを削除してから、そのリストページを再度開いたときに Windows がそれらを再作成できるようにすることです (これは と を削除することで実行PastIconsStreamできIconStreamsますHKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify)

しかし、ここでも問題は、 Explorer.exe を強制終了して再起動した後にのみ結果が表示されることです。explorer.exe を再起動すると、リストが再構築されますが、今回は正しいアイコンが表示されます (つまり、アンインストールされたアイコンは含まれません)。アプリ)。

物事を簡単にするために、私はこれを尋ねます:削除した後、explorer.exeを強制終了/再起動せず、再起動/ログオフせずに、リストにアンインストールされたアプリケーションが含まれないように、プログラムでエクスプローラーに「通知領域アイコンページリスト」を更新させるにはどうすればよい PastIconsStreamですIconStreamsかアイコン?

4

1 に答える 1

0

Windows に内部アイコン キャッシュを強制的に再構築させると、うまくいくはずです。

そのためには、次のことを行う必要があります。

  • Shell Icon Sizeレジストリのパラメータを変更します
  • を送信しHWND_BROADCASTて、UI 設定が変更されたことを通知します
  • デフォルトShell Icon Size値に戻します (そうしないと、Windows UI 全体が台無しになります)
  • ブロードキャスト メッセージを再送信する

(残念ながら) VB6 (VB.NET ではない) で書かれたデモンストレーション コードを次に示します。

Private Sub RebuildIconCache()

    Dim IconSize As Integer
    Dim r As Long

    IconSize = QueryValue(HKEY_CURRENT_USER, "Control Panel\Desktop\WindowMetrics", "Shell Icon Size")
    SetKeyValue HKEY_CURRENT_USER, "Control Panel\Desktop\WindowMetrics", "Shell Icon Size", CStr(IconSize - 1)

    SendMessageTimeout HWND_BROADCAST, _
                        WM_SETTINGCHANGE, _
                        SPI_SETNONCLIENTMETRICS, _
                        0&, SMTO_ABORTIFHUNG, _
                        10000&, r

    DoEvents

    If IconSize < 32 Then IconSize = 32
    SetKeyValue HKEY_CURRENT_USER, "Control Panel\Desktop\WindowMetrics", "Shell Icon Size", CStr(IconSize)

    SendMessageTimeout HWND_BROADCAST, _
                        WM_SETTINGCHANGE, _
                        SPI_SETNONCLIENTMETRICS, _
                        0&, SMTO_ABORTIFHUNG, _
                        10000&, r

End Sub
于 2016-07-01T09:22:46.163 に答える