共用方式為


將命令新增至您的擴充功能

上一步建立擴充功能。 我們將從該文章中建立的項目開始。

現在您已建立擴充功能,現在可以將命令新增至該擴充功能。

新增命令

我們可以從流覽至 /Pages/<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 會傳回您想要在此頁面上顯示的命令清單。 現在,它只會傳回一個不會執行任何動作的單一命令。 相反地,讓我們嘗試在用戶的預設網頁瀏覽器中開啟 此頁面

  1. 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",
        }
    ];
}

若要在命令選擇區中更新延伸模組,您需要:

  1. 部署擴充功能
  2. 在指令面板中,輸入「reload」指令以重新整理面板中的擴充功能。

重載的螢幕快照

備註

有數個重載選項,請務必選取 重載指令面板擴充功能

  1. 向下捲動至您的延伸模組,然後按 Enter
  2. Open the Command Palette documentation 上按enter
  3. 您應該會看到命令開啟命令面板文件。

OpenUrlCommand 是協助程式,用於在用戶的預設網頁瀏覽器中開啟 URL。

偵錯延伸模組

在您構建擴充功能時,您很可能會想要進行除錯。

  1. 將偵錯訊息新增至函 GetItems 式。
    public override IListItem[] GetItems()
    {
        var command = new OpenUrlCommand("https://learn.microsoft.com/windows/powertoys/command-palette/adding-commands");
    
+       Debug.Write("Debug message from GetItems");
    
        return [
            new ListItem(command)
            {
                Title = "Open the Command Palette documentation",
            }
        ];
    }
  1. 部署擴充功能
  2. 確認您處於偵錯組態
確認偵錯組態的指示
  1. 查看 Visual Studio 頂端的工具列
  2. 您會看到一個下拉式清單,其中顯示DebugRelease,位於綠色「開始」按鈕 ▶️旁。
  3. 如果顯示 Release,請按下拉式清單,然後選取 Debug

顯示偵錯的Visual Studio工具列螢幕快照

  1. 按下綠色的 [開始] 按鈕 ▶️ 或按 F5 以偵錯執行應用程式。
  2. 確定輸出視窗設定以顯示 Debug 輸出(Ctrl + Alt + O)

Visual Studio 的 [輸出] 面板螢幕快照

  1. 在命令選擇區中,執行 reload
  2. 移至您的延伸模組,然後選擇 Open the Command Palette documentation
  3. 在 Visual Studio 的 [輸出] 視窗中,您應該會看到 Debug message from GetItems

InvokableCommand 命令

讓我們繼續建置新的命令,以顯示 MessageBox。 若要這樣做,我們需要建立實作 InvokableCommand的新類別。

  1. 在 Visual Studio 中,將新的類別檔案新增至您的 Pages 目錄
    • 鍵盤快捷方式:按 Ctrl + Shift + A
    • 或在方案總管中,移至 [專案 > 新增項目...
  2. 在 [新增專案] 對話框中:
    1. 從清單中選取 [類別]。
    2. 為您的類別檔案命名: ShowMessageCommand.cs
    3. 按兩下 [新增]。
  3. 將預設類別程式代碼取代為:
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 命令清單:

  1. <ExtensionName>.cs 中,更新 GetItems
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),
    ];
}
  1. 部署擴充功能
  2. 在指令面板中, Reload

就這樣,一條命令就能顯示消息框!

小提示

此時,您可能想要為專案初始化 git 存放庫 /{您選擇的其他原始檔控制方法}。 這可讓您更輕鬆地追蹤變更,並與其他人共用您的延伸模組。

建議您使用 GitHub,因為您可以輕鬆地與其他人共同作業延伸模組、取得意見反應,並與世界共用。

頁面類型

到目前為止,我們只使用「執行某些動作」的命令。 不過,您也可以新增命令,以在命令選擇區內顯示其他頁面。 調色盤中有兩種類型的「命令」:

  • InvokableCommand- 這些是執行某些動作的命令
  • IPage- 這些是顯示某些東西的命令

因為 IPage 實作屬於 ICommand 的一部分,因此您可以在所有可以使用命令的位置使用它們。 這表示您可以將它們新增至命令的最上層清單,或新增至頁面上的命令清單、專案上的作功能表等等。

您可以顯示兩種不同的頁面:

  • ListPage - 這是顯示命令列表的頁面。 這是我們到目前為止一直在處理的工作。

ListPage 的螢幕快照

  • ContentPage - 這是向使用者顯示豐富內容的頁面。 這可讓您指定抽象內容,並交由命令選擇區在原生體驗中呈現内容。 目前支援兩種不同類型的內容:

使用 ContentPage 擴充功能的螢幕快照

  • 表單內容 - 這是向使用者顯示表單的內容,然後將該表單的結果傳回延伸模組。 這些是由 調適型卡片 提供,這適用於取得使用者輸入,或顯示更複雜的資訊配置。 如需詳細資訊,請參閱 FormContent

表單內容的螢幕快照

新增更多命令

首先,新增顯示命令清單的新頁面。 建立實作 ListPage 的新類別。

  1. Pages 資料夾中,建立名為 的新類別 MySecondPage
  2. 將程式代碼更新為:
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();
    }
}

1.更新 <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" },
        ];
    }
  1. 部署擴充功能
  2. 在指令面板中, Reload

您現在應該會在您的擴充功能中看到一個新頁面,上面顯示有 100 個將數字複製到剪貼簿的命令。

下一步: 更新命令清單