私はそれがこれと呼ばれるものだと思います:
そのようなものを自分のプログラムに追加できるようにしたいです。開くボタンや、アプリ内でメソッドを実行するその他のボタンなど。ちなみにこれはC#です。
Windows 7 API コード パックを調べてみましたが、思い通りに動作しません。私が望むように、アプリ内でメソッドを実行することはできません。他のアプリを開くだけです。
このようなことは可能ですか?
ジャンプリストの仕組みを理解していないのはあなただと思います。「他のアプリを開くだけです」 まさにそれが行うことであり、他には何もありません。これは Windows 7 の機能であり、API Code Pack の制限ではありません。これの重要なポイントは、アプリケーションが実行されていないという事実です。そのため、どこでメソッドを実行する必要がありますか? 正しい実装は、JumpList で正しいパラメーターを使用してアプリケーションを実行し、アプリケーション内で Main メソッドをそれらのパラメーターに応じて異なるメソッドを呼び出すことです。コンソール アプリと同様に、ウィンドウ アプリケーションにも入力パラメーターがあることを忘れないでください。
Outlook と Messenger を見ると、アプリ内で他のコマンドが呼び出されるので、それが可能であることがわかります。しかし、@Euphoric が言うように、ジャンプリストのアーキテクチャは非常にシンプルです。目的地 (ファイル名や URL など) を選択すると、Windows はアプリの別のインスタンスを起動し、その目的地をコマンド ライン引数として渡します。タスクを選択すると、Windows がそのタスクを起動しますが、これは他の exe である必要があります。
この一見パラドックスを解決するにはどうすればよいでしょうか。もう 1 つの exe は、メイン アプリと通信するヘルパー exe です。この例は不足していますが、11 月初旬の講演用にデモに取り組んでおり、完成したらブログに掲載します。おそらく、このアーキテクチャー・ポインターがあなたの出発点となるでしょう。
URL をジャンプ リスト アイテムに割り当て、HTTP リスナーを使用してアプリケーションでメソッドを呼び出します。C# HttpListener を使用したこの URL マッピングのように
さらに、厄介なルートに進み、共有ミューテックスを使用してアプリケーションを単一インスタンスのみにし、名前付きパイプを介してコマンド ライン引数を転送することもできます。しかし、http リスナーの方が優れています ;)