前へ: 拡張機能の作成。 この記事で作成したプロジェクトから始めます。
拡張機能を作成したので、いくつかのコマンドを追加します。
いくつかのコマンドを追加する
まず、 <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 個のコマンドが表示されます。
次へ: コマンドの一覧を更新する
関連コンテンツ
Windows developer