RAD Studio XEにジャンプリストを追加する

uJumpList.pasを少し修正。TJumplist.CreateJumpList内でFAppIDが空の場合SetAppIDを実行しないように修正しました。

さて、本題。
前回までの記事で作ったユニットを使ってRad Studioにジャンプリストを追加してみようと思います。
RadStudioへの処理は、実装が一番楽なOTAのIOTAMenuWizardを使って「ヘルプ」メニューにジャンプリスト作成用のメニューを追加。その中でジャンプリストの追加処理をしたいと思います。OTAに関する詳しい事はA7Mさんのこの記事等が参考になります。

タスクを追加する処理は下記のような感じです。とりあえず固定でDelphi/C++Builderパーソナリティ起動用タスクを追加します。
ジャンプリストは一度追加したらWindowsの方で記憶してくれるようなので何度も実行する必要は無いです。

TJumpListExprt = class(TNotifierObject, IOTAWizard, IOTAMenuWizard)
  public
    { IOTAWizard }
    function GetIDString: string;
    function GetName: string;
    function GetState: TWizardState;
    procedure Execute;

    { IOTAMenuWizard }
    function GetMenuText: string;
 end;

// メニューが実行された
procedure TJumpListExprt.Execute;
var
  JL: TJumplist;
  Task: TTaskItem;

  AppId: PChar;
  Path: String;
begin
  // WindowsVista以前の場合は実行しない
  if Not CheckWin32Version(6, 1) then Exit;
  // 一応AppUserModelIDを取得していますが、現在のRadStudioでは設定されていないのか取得できないのかNullが返ってきます。
  GetCurrentProcessExplicitAppUserModelID(AppId);
  JL := TJumplist.Create(AppId);
  if Assigned(AppId) then
    CoTaskMemFree(AppId);

  Path := GetAppPath;

  // Delphiパーソナリティのタスク
  Task := TTaskItem.Create;
  Task.Path := Path;
  Task.Argument := '-pDelphi';
  Task.Title := 'Delphi XE';
  Task.Description := 'Delphi パーソナリティを起動します';
  Task.IconLocation := Path;
  Task.IconIndex := 0;
  JL.Tasks.Add(Task);

  // C++Builderパーソナリティのタスク
  Task := TTaskItem.Create;
  Task.Path := Path;
  Task.Argument := '-pCBuilder';
  Task.Title := 'C++Builder XE';
  Task.Description := 'C++Builder パーソナリティを起動します';
  Task.IconLocation := Path;
  Task.IconIndex := 0;
  JL.Tasks.Add(Task);

  JL.CreateJumpList;

  FreeAndNil(JL);
end;

ジャンプリストを表示したら以下のような感じです。右クリックでパーソナリティを選択できるので便利かも?

気が向いたら追加するタスクを編集できるようにしたいですね。

今回のエキスパートのソースはこちら