【開発メモ】Windowsフォームアプリで、タスクリストを作成する

 

前回の「Windowsフォームで、タスクバーにプログレスを表示」を使って、タスクリストを作成してみます。

使い道としては、あまりないかもしれませんが、タスクバーに、アイコンを登録している時には、少しだけ便利になります。

準備として、プログラムを、ファイルを渡されたり/引数でプログラムが処理を行うように作成します(別記予定)。

面倒なので、クラスを作成します。


public class CJumpItem
{
// タスク以外のカテゴリ
public string CustomCategory { get; set; }
// タスクに乗せるタイトル
public string Title { get; set; }
// タスクにマウスを合わせた時のTip
public string Description { get; set; }
// アプリケーションに渡す引数
public string Arguments { get; set; }
// 起動パス(別アプリでもOK)
public string ApplicationPath { get; set; }
// 表示するアイコンが内封されているEXE/DLLのパス
public string IconResourcePath { get; set; }
// 起動時の実行フォルダ
public string WorkingDirectory { get; set; }
// アイコン番号
public int IconResourceIndex { get; set; }
//
public CJumpItem()
{
CustomCategory = "";
Title = "";
Description = "";
Arguments = "";
ApplicationPath = "";
IconResourcePath = "";
IconResourceIndex = 0;
WorkingDirectory = "";
}
}

クラスの内容は、コメントを見てください。
それ以上の説明はないです。
適当な場所に、このクラスを記述して、次のメソッドを実装します。


public static void setJumpList(bool bShowRecentCategory, bool bShowFrequentCategory, CJumpItem[] mJumpItems)
{
JumpList jumpList = new JumpList();
foreach (CJumpItem item in mJumpItems)
{
JumpTask task = new JumpTask();
//
task.Title = item.Title;
if (item.CustomCategory != "")
{
task.CustomCategory = item.CustomCategory;
}
if (item.ApplicationPath != "")
{
task.ApplicationPath = item.ApplicationPath;
}
if (item.Arguments != "")
{
task.Arguments = item.Arguments;
}
if (item.Description != "")
{
task.Description = item.Description;
}
if (item.IconResourcePath != "")
{
task.IconResourcePath = item.IconResourcePath;
task.IconResourceIndex = item.IconResourceIndex;
}
if (item.WorkingDirectory != "")
{
task.WorkingDirectory = item.WorkingDirectory;
}
//
jumpList.JumpItems.Add(task);
}
jumpList.ShowRecentCategory = bShowRecentCategory;
jumpList.ShowFrequentCategory = bShowFrequentCategory;
jumpList.Apply();
}

記述場所なんかを気にしてくれれば”多分”動作します。

あとは、これを呼び出すために必要な、CJumpItem[] mJumpItems を生成するだけです。

System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(strSearchPath);
IEnumerable<System.IO.FileInfo> files = di.EnumerateFiles(“*.*”, System.IO.SearchOption.AllDirectories);
foreach (System.IO.FileInfo f in files)
{
CJumpItem jump = new CJumpItem();
jump.Arguments = f.FullName;
jump.Title = f.FullName;
jump.Description = f.LastWriteTime.ToString(“yyyy/MM/dd HH:mm”) + ” 保存”;
int iPos;
if (jumpItems == null)
{
iPos = 0;
}
else
{
iPos = jumpItems.Length;
}
Array.Resize(ref jumpItems, iPos + 1);
jumpItems[iPos] = jump;
}

こんな感じで、strSearchPath に指定された、Folderにあるファイルを並べて表示するようにしています。この辺りは、好みで変更してください。