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;
ジャンプリストを表示したら以下のような感じです。右クリックでパーソナリティを選択できるので便利かも?
気が向いたら追加するタスクを編集できるようにしたいですね。
今回のエキスパートのソースはこちら。