コマンド パレット拡張機能のしくみ

コマンド パレット拡張機能は、WinRT API を介してコマンド パレットと通信するスタンドアロンの.NET アプリケーションです。 各拡張機能は独自のプロセスで実行され、アプリ マニフェストを介してコマンド パレットに登録され、拡張機能が分離され、セキュリティで保護され、簡単にデプロイできるようになります。

このページでは、拡張機能モデルの背後にある主要な概念 (拡張機能の検出方法、コマンドとページの提供方法、構築できるエクスペリエンスの種類) について説明します。

インストールされている拡張機能をコマンド パレットで検出する方法

コマンド パレットは、Windows パッケージ カタログを使用して、コマンド パレット拡張機能として宣言するインストール済みアプリを検索します。 拡張機能は、.appxmanifestという名前のwindows.appExtensionを宣言することで、com.microsoft.commandpaletteを通じて登録します。

<Extensions>
    <com:Extension Category="windows.comServer">
        <com:ComServer>
            <com:ExeServer Executable="ExtensionName.exe" Arguments="-RegisterProcessAsComServer" DisplayName="Sample Extension">
                <com:Class Id="<Extension CLSID Here>" DisplayName="Sample Extension" />
            </com:ExeServer>
        </com:ComServer>
    </com:Extension>
    <uap3:Extension Category="windows.appExtension">
        <uap3:AppExtension Name="com.microsoft.commandpalette"
                           Id="YourApplicationUniqueId"
                           PublicFolder="Public"
                           DisplayName="Sample Extension"
                           Description="Sample Extension for Command Palette">
            <uap3:Properties>
                <CmdPalProvider>
                    <Activation>
                        <CreateInstance ClassId="<Extension CLSID Here>" />
                    </Activation>
                    <SupportedInterfaces>
                        <Commands />
                    </SupportedInterfaces>
                </CmdPalProvider>
            </uap3:Properties>
        </uap3:AppExtension>
    </uap3:Extension>
</Extensions>

拡張機能では、アプリとコマンド パレットの間の通信層としてアウトプロセス COM サーバーが使用されます。 詳細については心配しないでください 。テンプレート プロジェクトでは、COM サーバーの作成、COM サーバーの起動、およびオブジェクトのコマンド パレットへのマーシャリングが自動的に処理されます。

マニフェストに関する重要な注意事項

  • AppExtensionは、Namecom.microsoft.commandpalette に設定する必要があります。 これは、コマンド パレットが拡張機能の検出に使用する一意の識別子です。
  • ComServer要素は、拡張機能のインスタンス化にコマンド パレットが使用する COM クラス GUID を登録します。 この CLSID が一意であり、マニフェスト内の 3 つの場所すべてで一致していることを確認します。
  • CmdPalProvider セクションの Properties 要素は、コマンド パレットがインスタンス化する COM クラスの CLSID を指定します。 現時点では、Commands のみがサポートされています。

拡張 API

コマンド パレットは、Microsoft.CommandPalette.Extensions を使用してコマンド パレットと通信する拡張機能のための WinRT API を定義します。 コンパニオン ツールキット ライブラリ (Microsoft。CommandPalette.Extensions.Toolkit) には、一般的なパターンを簡略化する基底クラスとヘルパーが用意されています。

すべての拡張機能は、IExtension インターフェイスを実装し、GetProvider メソッドを提供してICommandProviderを返します。 コマンド プロバイダーは、拡張機能が提供するコマンドとページを定義する場所です。

コマンドとページ

拡張機能では、いくつかの種類のコンテンツを提供できます。

  • 最上位レベルのコマンド — コマンド パレットのホーム ページに表示され、ユーザーがすぐにアクセスできるようにするコマンド。
  • フォールバック コマンド - 他の結果がユーザーのクエリと一致しない場合にトリガーされるコマンド。検索ベースまたはキャッチオール機能に役立ちます。
  • コンテキスト メニュー項目 - 他のコマンドの右クリック コンテキスト メニューに表示されるその他のアクション。

各コマンドは、コンテンツを表示する ページ に移動できます。 コマンド パレットでは、次の種類のページがサポートされています。

ページの種類 説明
ページを一覧表示する 選択可能な項目の検索可能な一覧を表示します。
詳細ページ セクション、タグ、リンクを含むリッチ コンテンツを表示します。
フォーム ページ 対話型ワークフローのユーザー入力フィールドを表示します。
マークダウン ページ 書式設定されたマークダウン コンテンツをレンダリングします。
グリッド ページ ギャラリーまたはグリッド レイアウトで項目を表示します。

拡張機能では、拡張機能ごとの構成用に独自の設定ページを提供したり、 コマンドを Dock にピン留めしたりすることもできます。

概要

最初の拡張機能をビルドする準備はできましたか? 作業 の開始 に進み、プロジェクトを設定し、最初のコマンドを作成します。