1

ジャンプリストを介して別のアプリケーションを起動するためのスタブとして機能する 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」で始まり、その後に漢字が続くダイアログ ボックスが表示されます。ジャンプリストのアイテムにカーソルを合わせると、設定した説明の代わりに漢字も表示されます。

質問:

  1. ジャンプリストの漢字はどうなっていますか?
  2. タスクバーのショートカットでアプリ ID を設定すると、[タスク] セクションと [最近] セクションが切り替わるのはなぜですか?
  3. 可能であれば、私が実際に欲しいものを達成する方法は何でしょうか: 起動されたアイテムがタスクバー アイコンの下にグループ化されるカスタム ジャンプ リストですか? (起動する予定のプロセスには、現在アプリIDが設定されていないことに注意してください)
4

1 に答える 1

1

ここではあまり反応がありません;]

その間、私は自分で主な問題を解決することができました。これは簡単な解決策ではありませんが、要件を満たしています。プログラムがバックラウンドで実行され、CBT フックがインストールされます。アプリケーションがウィンドウを作成するたびに (HookProc コード = HCBT_CREATEWND)、フックは、パスと必要なアプリケーション ID を含むマップに対してアプリケーションのパスをチェックします。一致が見つかった場合、HWND のアプリケーション ID が設定されます。これは、ウィンドウが実際に表示され、カスタム タスク リストと結合される前に発生するため、ユーザーの観点からは、アプリケーションは、最近使用した/ピン留めされたドキュメント リストをサポートするアプリケーションのように動作します。

于 2011-01-29T15:38:34.343 に答える