次の方法で共有


拡張機能へのコマンドの追加

へ: 拡張機能の作成。 この記事で作成したプロジェクトから始めます。

拡張機能を作成したので、いくつかのコマンドを追加します。

いくつかのコマンドを追加する

まず、 <ExtensionName>Page.cs ファイルに移動します。 このファイルは、ユーザーが拡張機能を選択したときに表示される ListPage です。 そこに次の情報が表示されます。

public <ExtensionName>Page()
{
    Icon = IconHelpers.FromRelativePath("Assets\\StoreLogo.png");
    Title = "My sample extension";
    Name = "Open";
}
public override IListItem[] GetItems()
{
    return [
        new ListItem(new NoOpCommand()) { Title = "TODO: Implement your extension here" }
    ];
}

ここでは、コマンドを選択したときに最上位レベルに表示されるページ、タイトル、および名前のアイコンが設定されていることがわかります。 GetItems メソッドは、このページに表示するコマンドの一覧を返す場所です。 今のところ、それは何もしない単一のコマンドを返しています。 代わりに、そのコマンドをユーザーの既定の Web ブラウザーで この ページを開いてみましょう。

GetItems の実装を次のように変更できます。

public override IListItem[] GetItems()
{
    var command = new OpenUrlCommand("https://learn.microsoft.com/windows/powertoys/command-palette/adding-commands");
    return [
        new ListItem(command)
        {
            Title = "Open the Command Palette documentation",
        }
    ];
}

アプリを再デプロイし、"reload" コマンドを実行してパレット内の拡張機能を更新し、拡張機能に進みます。 コマンドを実行すると、そのコマンドがコマンド パレットのドキュメントを開くことが確認できるでしょう。

OpenUrlCommand は、ユーザーの既定の Web ブラウザーで URL を開くヘルパーです。 必要に応じて拡張機能を実装することもできます。 代わりに、 MessageBox を表示する新しいコマンドを作成しましょう。 そのためには、 IInvokableCommand を実装する新しいクラスを作成する必要があります。

using System.Runtime.InteropServices;

namespace <ExtensionName>;

internal sealed partial class ShowMessageCommand : InvokableCommand
{
    public override string Name => "Show message";
    public override IconInfo Icon => new("\uE8A7");

    public override CommandResult Invoke()
    {
        // 0x00001000 is MB_SYSTEMMODAL, which will display the message box on top of other windows.
        _ = MessageBox(0, "I came from the Command Palette", "What's up?", 0x00001000);
        return CommandResult.KeepOpen();
    }


    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
    public static extern int MessageBox(IntPtr hWnd, string text, string caption, uint type);
}

これで、 <ExtensionName>Page.cs ファイル内のコマンドの一覧に次のコマンドを追加できます。

public override IListItem[] GetItems()
{
    var command = new OpenUrlCommand("https://learn.microsoft.com/windows/powertoys/command-palette/creating-an-extension");
    var showMessageCommand = new ShowMessageCommand();
    return [
        new ListItem(command)
        {
            Title = "Open the Command Palette documentation",
        },
        new ListItem(showMessageCommand),
    ];
}

デプロイと再読み込み、およびプレスト - メッセージ ボックスを表示するコマンド。

ヒント

この時点で、プロジェクトの git リポジトリ/{他のソース管理メソッド} を初期化することが必要になる可能性があります。 これにより、変更を追跡したり、拡張機能を他のユーザーと共有したりしやすくなります。

拡張機能で他のユーザーと簡単に共同作業を行い、フィードバックを受け取り、世界と共有することが簡単であるため、GitHub を使用することをお勧めします。

ページの追加

ここまでは、"何かを行う" コマンドでのみ作業してきました。 ただし、コマンド パレット内に追加のページを表示するコマンドを追加することもできます。 パレットには基本的に次の 2 種類の "コマンド" があります。

  • IInvokableCommand - これらは 何かを行うコマンドです。
  • IPage - これらは 何かを示すコマンドです。

IPage 実装は ICommand の実装であるため、コマンドを使用できる任意の場所で使用できます。 つまり、それらをコマンドの最上位レベルの一覧、またはページ上のコマンドの一覧、項目のコンテキスト メニューなどに追加できます。

表示できるページには、次の 2 種類があります。

  • ListPage - コマンドの一覧を表示するページです。 これは、これまで取り組んできたものです。
  • ContentPage - ユーザーにリッチ コンテンツを表示するページです。 これにより、抽象的な内容を指定でき、コンテンツのレンダリングをネイティブ エクスペリエンスでコマンド パレットに任せることができます。 これまでにサポートされているコンテンツには、次の 2 種類があります。
    • Markdown コンテンツ - これは Markdown で記述され、コマンド パレットに表示されるコンテンツです。 詳細については 、MarkdownContent を参照してください。
    • フォーム コンテンツ - フォームをユーザーに表示し、そのフォームの結果を拡張機能に返すコンテンツです。 これらは アダプティブ カード を利用しています。これは、ユーザー入力を取得したり、より複雑な情報レイアウトを表示したりするのに役立ちます。 詳細については、 FormContent を参照してください。

まず、コマンドの一覧を表示する新しいページを追加します。 ListPage を実装する新しいクラスを作成します。

using Microsoft.CommandPalette.Extensions.Toolkit;
using System.Linq;

namespace <ExtensionName>;

internal sealed partial class MySecondPage : ListPage
{
    public MySecondPage()
    {
        Icon = new("\uF147"); // Dial2
        Title = "My second page";
        Name = "Open";
    }

    public override IListItem[] GetItems()
    {
        // Return 100 CopyText commands
        return Enumerable
            .Range(0, 100)
            .Select(i => new ListItem(new CopyTextCommand($"{i}")) 
            {
                Title = $"Copy text {i}" 
            }).ToArray();
    }
}

次に、この新しいページを含むように <ExtensionName>Page.cs を更新します。

    public override IListItem[] GetItems()
    {
        OpenUrlCommand command = new("https://learn.microsoft.com/windows/powertoys/command-palette/creating-an-extension");
        return [
            new ListItem(command)
            {
                Title = "Open the Command Palette documentation",
            },
            new ListItem(new ShowMessageCommand()),
+            new ListItem(new MySecondPage()) { Title = "My second page", Subtitle = "A second page of commands" },
        ];
    }

展開、再読み込み、拡張機能に新しいページが表示され、クリップボードに数値をコピーする 100 個のコマンドが表示されます。

次へ: コマンドの一覧を更新する