ジャンプリストを介して別のアプリケーションを起動するためのスタブとして機能する C++ で記述された単純なコンソール アプリケーションがあります。目的は、これをサポートしていないアプリケーションにジャンプリスト機能を追加することです。stub.exe と呼びます。stub.exe を実行すると、次の手順を使用してカスタム ジャンプリストが作成されます (MS サンプルから抜粋)。
create an ICustomDestinationList
ICustomDestinationList::BeginList()
create an IObjectCollection
for_each item_to_add
create an IShellLink, set its path/arguments/title/icon
add IShellLink to the IObjectCollection
get the IObjectArray interface from the IObjectCollection
call ICustomDestinationList::AddUserTasks( IObjectArray interface )
ICustomDestinationList::CommitList()
stub.exe をタスクバーに固定して右クリックすると、jupilst が表示され、追加されたすべての IShellLinks が含まれます。項目をクリックすると、対応するプロセスが起動します。
ここで、このジャンプリストを介して起動されたプロセスに、独自のグループを持たせるのではなく、stub.exe のタスクバー アイコンの下にグループ化されたウィンドウを持たせたいと考えています。これを機能させるための鍵は、AppUsermodelID のようです。これは私がこれまでに試したことです:
- テストのためだけに、いくつかのショートカットを作成し、IPropertyStore->SetValue( PKEY_AppUserModel_ID, "id" ) で ID を設定します。実際、これらのショートカットを起動すると、それらはすべて同じタスクバー アイコンの下にグループ化されます。
- ショートカットは私が望むことを行うので、stub.exe のジャンプリストにショートカットを追加しようとしましたが、効果はありません。ショートカットはジャンプリストにも表示されません (ショートカットへのショートカットを作成できないのでしょうか?)、すべてのメソッドが S_OK を返します。
- ジャンプリストに追加される各 IShellLinks に PKEY_AppUserModel_ID を設定する: 効果なし
- ICustomDestinationList->SetAppID() の呼び出し: 効果なし
- SubTasks を使用する代わりに、SHAddToRecentDocs で試してみました: 効果なし。最近のドキュメント リストが表示されません。しかし、今、物事は面倒です。固定されたタスクバー項目 (%APPDATA%/Roaming/Microsoft/Internet Explorer/Quick Launch/User Pinned/TaskBar 内の項目) を担当するショートカットに AppUserModelID を設定した後、ジャンプリストが変更されました: 「タスク」が表示されません。アイテムは表示されなくなりましたが、「最近」と、SHAddToRecentDocs を使用して追加したアイテムが表示されます。それらをクリックすると、タイトルが「d:\desktop」で始まり、その後に漢字が続くダイアログ ボックスが表示されます。ジャンプリストのアイテムにカーソルを合わせると、設定した説明の代わりに漢字も表示されます。
質問:
- ジャンプリストの漢字はどうなっていますか?
- タスクバーのショートカットでアプリ ID を設定すると、[タスク] セクションと [最近] セクションが切り替わるのはなぜですか?
- 可能であれば、私が実際に欲しいものを達成する方法は何でしょうか: 起動されたアイテムがタスクバー アイコンの下にグループ化されるカスタム ジャンプ リストですか? (起動する予定のプロセスには、現在アプリIDが設定されていないことに注意してください)