2013年2月27日水曜日

Windows(R) API Code Pack for Microsoft(R)を使ってタスクバーにプログレスバーを表示

C#でWindows API Code Pack for Microsoftを使ってWin7のタスクバーのプログレスバーを表示する方法

僕が忘れないように覚え書きです


APIは↓リンクから落としてきます
http://archive.msdn.microsoft.com/WindowsAPICodePack

Downloadsタブの"Windows API Code Pack ○○○ (Binaries, Source, Docs)"をクリックすると
規約が出てくるので I Agreeをクリックし落とします
ファイルはexeで ダブルクリックをするとそのフォルダに解凍されるっぽいです
○○○はバージョンが入り
現時点ではv1.1でした
以降v1.1は各自のバージョンで読み替えてください

解答してできたフォルダ"Windows API Code Pack 1.1"の中には3個ほどフォルダがあります
そのなかの"binaries"フォルダにdllとかが入っているので
C#のソリューションエクスプローラーで参照設定に追加します
必要なのはおそらくMicrosoft.WindowsAPICodePack.Shell.dllのはずです
(未確認 僕はとりあえずザクッと全部追加してしまった)


ココからソースコードの方になります
まず
"using Microsoft.WindowsAPICodePack.Taskbar;"
を追加しておくと楽です

そして適切な場所でタスクバーを初期化します
"TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Normal);"
Normalを書き換えると色々とできるようです
例えばNormalの場合は緑ですが
Errorを指定した場合は赤になります
また、NoProgressを指定するとプログレスバーが消えるので、処理を終了しましたという意思表示が可能になります


プログレスバーの進行状況を変更するには
"TaskbarManager.Instance.SetProgressValue(val, max);"
を呼びます
valには現在値を、maxには最大値を入れます
minは指定出来ません


処理が終了した場合は上記の通りStateでNoProgressを指定するといいでしょう

なお、Errorを指定する際の注意点として
処理の途中でエラーになった場合はErrorを指定するだけでいいのですが
処理が始まる前にエラーになったばあいは
"TaskbarManager.Instance.SetProgressValue(1, 1);"
を呼んでプログレスバーを埋めると読みやすくなります

これはvalue=0の場合にプログレスバーの表示が非常に小さくなってしまうため
見づらくなるのを防ぐ目的があります



左:SetProgressValue(1, 1);を読んだ場合
右:SetProgressValue(1, 1);を呼ばなかった場合

単純な見やすさでは圧倒的に読んだ場合の方がいいです

ただし処理途中でのエラーの場合は呼ぶべきではありません
場合にもよりますが、処理途中のエラーで1:1を設定するとどこでエラーが発生したかわからなくなるためです



以上、Win7のタスクバーにプログレスバーを表示する方法です
なお、コードの中にはスペルミスがあるかもしれません
各自適切に読みなおしてください