Windows API Code Packによるアプリ開発 第10回 Windows 7 タスクバー ~アプリケーション ユーザー モデル ID (AppID)~

Windows API Code Packによるアプリ開発 [TechED2010 ポストセッション]
第10回 Windows 7 タスクバー ~アプリケーション ユーザー モデル ID (AppID)~

※ 今回は、TechEDで説明していない内容です。

[ アプリケーション ユーザーモデル ID]
第9回の記事の後半で、アプリケーションIDというものがあることを説明しました。
アプリケーションIDは、アプリケーションユーザー モデル ID (またはAppID)とも呼ばれ、Windows 7のタスクバーで使用されています。
AppIDが設定されていないアプリケーションは、実行可能形式ファイル(.exeファイル)ごとにデフォルトのIDが割り振られます。
AppIDを指定することもできます。

[ タスクバーとの関連 ]
同じAppIDを持ったアプリケーションは、実行可能形式ファイルが異なっても、タスクバー上で1つのアイコンにまとめられます。
逆に、1つのアプリケーションでも、複数のウィンドウを生成する際にウィンドウごとに別のAppIDを振り分けることにより、タスクバー上で別のアイコンとして表示させることができます。

[ サンプルプログラム ]
簡単なサンプルプログラムを作って実験してみましょう。

手順1 : Code Packへの参照の追加とusingの追加
第5回の[タスクバー関連の機能を使う前に] を参考に、Code Packへの参照の追加と、usingのコードを追加してください。

手順2 : プロジェクトの作成
Visual Studioを使用して、WPFまたはWindowsフォームのアプリケーションのプロジェクトを作成してください。

手順3 : ボタンの貼り付け
フォームの中央あたりに、ボタンコントロールを貼り付けてください。

手順4 : ボタンのクリックに対するイベントハンドラの作成
貼り付けたボタンをダブルクリックし、生成されたイベントハンドラに以下の青字の部分のコードを記述してください。

WPFの場合
private void button1_Click(object sender, RoutedEventArgs e)
{
Window newWindow = new MainWindow();
newWindow.Show();
}

Windowsフォーム場合
private void button1_Click(object sender, EventArgs e)
{
Form newWindow = new Form1();
newWindow.Show();
}

手順5 : AppIDの設定
コンストラクタに以下の青字の部分のコードを追加してください。
ここではテスト用として、フォームが生成されたときの時間の"秒"の部分を文字列に変換し、AppIDとして設定しています。
この部分は、任意の文字列を入れても構いません。

WPFの場合
public MainWindow()
{
InitializeComponent();

string appID;
appID = DateTime.Now.Second.ToString();
TaskbarManager.Instance.ApplicationId = appID;
this.Title = appID;
}

Windowsフォームの場合
public Form1()
{
InitializeComponent();

string appID;
appID = DateTime.Now.Second.ToString();
TaskbarManager.Instance.ApplicationId = appID;
this.Text = appID;
}

実行して、ボタンをクリックすると新しいウィンドウを開きます。
このときに、AppIDが異なれば、タスクバー上で別のアイコンとして表示されます。

[ 同じAppIDを持つアプリケーションの場合 ]
下記の画面は、WPFで作成した先ほどのサンプルと、Windowsフォームで作成したサンプルの両方を実行した画面です。
右側にある2つのウィンドウは、WPFで作成したアプリケーションです。AppIDは上のものが"41"、下のものが"45"です。
左側にあるウィンドウはWindowsフォームで作成したもので、AppIDは"45"です。
タスクバー上で見ると、AppIDが"45"のものでまとめられていることがわかります。
WPFとWindowsフォームのアプリケーションは、ウィンドウの左上に表示されているデフォルトのアイコンを見ると区別できます。

[ 推奨するAppID]
MSDNライブラリによれば、推奨するAppIDのつけ方は以下のとおりです。

CompanyName.ProductName.SubProduct.VersionInformation

このように、会社名やプロダクト名からAppIDを作ることを推奨されています。
詳細は、以下のMSDNライブラリの記事をご覧ください。
https://msdn.microsoft.com/ja-jp/library/ee198953(VS.85).aspx

[AppIDの応用 ]
Internet Explorer 9では、AppIDを使用してタスクバーを活用しています。
特定のサイトをタスクバーに固定できる機能は、このAppIDを活用したものです。
Internet Explorer 9のベータ版は、下記サイトよりダウンロードできます。
https://windows.microsoft.com/ja-JP/internet-explorer/products/ie-9/home
※ IE9ベータ版のアンインストールについては、下記サイトをご参照ください。
https://windows.microsoft.com/ja-JP/internet-explorer/help/ie-9/how-do-i-install-or-uninstall-internet-explorer-9

次回はTDI(タブ ドキュメントインターフェイス)アプリケーションにおけるサムネイルについて説明します。

[参考資料 ]
TechEDでのビデオとスライド
https://msdn.microsoft.com/ja-jp/events/ff973814.aspx
内容を早く知りたい方や、デモを確認されたい方は、ビデオをご覧ください。
※ 今回の内容は、TechEDでは説明しておりません。

Windows API Code PackによるWindowsアプリ開発 [TechEDポストセッション]
第1回 : Windows API Code Packとは
第2回 : アプリケーションの再起動と修復その1
第3回 : アプリケーションの再起動と修復その2
第4回 : 電源の状況の把握
第5回 : Windows 7 タスクバー ~アイコンオーバーレイ~
第6回 : Windows 7 タスクバー~進行状況バー ( プログレス バー )
第7回 : Windows 7 タスクバー~サムネイル ツールバー その1
第8回 : Windows 7 タスクバー ~サムネイル ツールバー その2
第9回 : Windows 7 タスクバー ~サムネイルについて知っておくべきこと~
第10回 : Windows 7 タスクバー ~アプリケーションユーザー モデル ID (AppID)~

番外編 : Windowsフォームアプリによる電源の状況の把握
番外編1 : アプリをクラッシュさせるには
番外編2 : シューティングゲームにタスクバーの機能を追加
この後も、Windows 7のタスクバー関連の説明を行います。

マイクロソフト
田中達彦