タスクバーのグルーピングとWindowsForm

WindowsXP以降、MicrosoftのO/Sにはタスクバー上のプログラムボタンをグループ化する機能がついている。例えば同じアプリケーションから起動されたウィンドウが一定数に達した場合、プログラム名が付いた1つのタスクバーボタンにまとめられる。そしてまとめられたウインドウボタンをクリックすることで各ウィンドウにアクセスできるようになるのだ。標準では1つのアプリケーションから更に5つのウィンドウが開かれると(トータルで6つのウインドウ)ボタンがまとめられるが、このウィンドウ数の閾値はレジストリで変更可能だ。
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
このキーをレジストリエディタで開き、TaskbarGroupSizeというDWORD値が無ければ作成してデータにこれ以上ウィンドウが増えたらボタンをまとめる数を設定すればいい。(ログオフ要)
なお、同キー上にあるTaskbarGlommingが有効(DWORD:1)になっていない場合はグルーピング自体無効。また、グルーピングされるウインドウの数は動的に変わるので注意が必要だ。


WindowsFormsで開発した.NETアプリケーションも当然この影響を受けるのだが、グルーピングされた際にタスクバーボタンに表示されるタイトルは何のプロパティが使われるのだろう。
実験のためにWindows Vista上でプロジェクト名"Showme"、フォーム名"ShowmeForm"でWindowsFormsアプリケーションをビルドして実行、実際にグルーピングを行ってみた。

グルーピング開始前のタイトルは"ShowmeForm"でフォーム名がそのまま、グルーピングされた際にはアセンブリ名が使われているようだ。

ならばと思いVisual Studio 2005上でアセンブリ名を"GroupingMe"等と変更してみたが、グルーピングされた際のタイトルは上記と同じ"Showme"で変わらなかった。
ここでちょっと戸惑ったのだがメタデータと言えばAssemblyInfoと思い、プロジェクト中のAssemblyInfo.csを開いてみると以下のようにAssemblyTitle属性がアセンブリ名の変更に同期していないことが分かった。

[assembly: AssemblyTitle("Showme")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Showme")]
[assembly: AssemblyCopyright("Copyright (C)  2007")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

ということはassemblyメタデータのAssemblyTitle属性が表示名ではないかと思い、今度は同属性を"GroupingMe"に変更してみたのだが表示されるタイトルは変わらなかった。

[assembly: AssemblyTitle("GroupingMe")]
:
:

いろいろと調べてみたが一度表示されたタイトルはシステムにキャッシュされているらしく、MuiCacheが残っているのが原因らしい。そこでレジストリ上から同キャッシュを探したうえ※で削除し、その上で同様にグルーピングしたのが以下のスクリーンショット

やはりグルーピングされた際のタイトル(表示名)はassemblyメタデータのAssemblyTitle属性が使われていることに間違いないだろう。

※WindowsXPならばHKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache、WindowsVistaであれば HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\Shell\MuiCacheやHKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCacheあたりか?