Windows API Code Packによるアプリ開発 第5回 Windows 7 タスクバー ~アイコン オーバーレイ~

Windows API Code Packによるアプリ開発 [TechED2010 ポストセッション]
第5回 Windows 7 タスクバー ~アイコン オーバーレイ~

今回は、Windows 7のタスクバーの機能である、アイコン オーバーレイの実装方法について説明します。
アイコン オーバーレイとは、この図のようにタスクバーのアイコンの右下に、小さな別のアイコンを表示させることです。

この例は、Windows Live Messengerの例です。

このように、アプリケーション側で何らかの変化があったり、注意を促したりするときにアイコン オーバーレイを使います。

アイコン オーバーレイの使い方はかなり簡単です。
使用する前の準備として、以下の2つの手順をしておいてください。

[タスクバー関連の機能を使う前に] -------

手順1 : Code Packへの参照の追加
Code Packの中で、タスクバーを含むシェルの機能を提供しているMicrosoft.WindowsAPICodePack.Shell.dllへの参照を追加します。

手順2 : usingの追加
コード上で、

using Microsoft.WindowsAPICodePack.Taskbar;

を追加します。
---------------------------------------------------------

これで、アイコン オーバーレイを含むタスクバーの機能を使えるようになります。
本連載の今後のタスクバー関連の記事でも上記の手順を必要とします。

それでは、アイコン オーバーレイを使ってみましょう。
アイコン オーバーレイを使用するには、アイコンを表示させたい場面で、以下のコードを実行させます。

TaskbarManager.Instance.SetOverlayIcon(System.Drawing.SystemIcons.Error, "");

この例では、システムアイコンであるエラーのアイコンを表示させています。
表示させるアイコンは、いったんリソースに追加して使用するのがよいでしょう。
WPFのアプリケーションの場合は、System.Drawingへの参照を追加しておいてください。

オーバーレイされたアイコンを消すには、以下のコードを実行します。

TaskbarManager.Instance.SetOverlayIcon(null, "");

.NET Framework 2.0をご使用の場合は、Visual Studio 2010またはVisual Studio 2008を使用して対象フレームワークを.NET Framework 3.0以上に変更してください。
変更するには、メニューの[プロジェクト]のいちばん下にある[(プロジェクト名)のプロパティ]を選択して、表示されるダイアログの[対象フレームワーク]の部分を変えてください。
実装の途中でPresentationCore や WindowsBase への参照を求められますので、参照の追加ダイアログの .NET タブにある該当するコンポーネントを選択し、参照を追加してください。

次回は、プログレスバー(進捗管理バー)について説明します。

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

Windows API Code PackによるWindowsアプリ開発 [TechEDポストセッション]
第1回 : Windows API Code Packとは
第2回 : アプリケーションの再起動と修復 その1
第3回 : アプリケーションの再起動と修復 その2
第4回 : 電源の状況の把握
第5回 : Windows 7 タスクバー ~アイコン オーバーレイ~
その後は、タスクバーのプログレスバー、アイコン オーバーレイというように進める予定です。

[お知らせ]

Windows 7 アプリ投稿キャンペーンを実施中です。
https://msdn.microsoft.com/ja-jp/windows/jpwin7cp01.aspx
既に作っているアプリケーションがある方や、現在アプリケーションを作成中の方は、ぜひアイコン オーバーレイの機能をつけてください。
アイコン オーバーレイの機能をつけただけでもキャンペーンへの応募資格がうまれますので、キャンペーンに参加できます。
皆様のご応募をお待ちしています。

マイクロソフト
田中達彦