Compartilhar via


Exemplos de extensão

A Paleta de Comandos fornece um modelo de extensão completo, permitindo que os desenvolvedores criem suas próprias experiências para a paleta.

Para obter os exemplos mais atualizados, confira o projeto de amostras no GitHub. Isso contém amostras atualizadas de tudo o que é possível com a Paleta de Comandos.

Criar um comando para fazer algo

Crie uma classe que implemente IInvokableCommand e implemente o método Invoke . Esse método será chamado quando o usuário selecionar o comando na Paleta de Comandos.

class MyCommand : Microsoft.CommandPalette.Extensions.Toolkit.InvokableCommand {
    public class MyCommand()
    {
        Name = "Do it"; // A short name for the command
        Icon = new("\uE945"); // Segoe UI LightningBolt
    }
    
    // Open GitHub in the user's default web browser
    public ICommandResult Invoke() {
        Process.Start(new ProcessStartInfo("https://github.com") { UseShellExecute = true });

        // Hides the Command Palette window, without changing the page that's open
        return CommandResult.Hide();
    }
}

Criar uma página de comandos

O exemplo a seguir mostra como criar uma página de comandos. Esta página será mostrada quando o usuário selecionar o comando "Abrir" na Paleta de Comandos:

using Microsoft.CommandPalette.Extensions.Toolkit;

class MyPage : ListPage {
    public MyPage()
    {
        Icon = IconHelpers.FromRelativePath("Assets\\StoreLogo.png");
        Title = "My sample extension";
        Name = "Open";
    }
    
    public override IListItem[] GetItems()
    {
        return [
            new ListItem(new OpenUrlCommand("https://github.com"))
            {
                Title = "Open GitHub",
            },
            new ListItem(new OpenUrlCommand("https://learn.microsoft.com"))
            {
                Title = "Open Microsoft Learn",
            },
            new ListItem(new OpenUrlCommand("https://github.com/microsoft/PowerToys"))
            {
                Title = "Open PowerToys on GitHub",
            },
            new ListItem(new CopyTextCommand("Foo bar"))
            {
                Title = "Copy 'Foo bar' to the clipboard",
            },
        ];
    }
}

Ícones

Ícones que usam a classe IIconInfo podem ser especificados de várias maneiras. Aqui estão alguns exemplos:


using Microsoft.CommandPalette.Extensions.Toolkit;

namespace ExtensionName;

internal sealed class Icons
{
    // Icons can be specified as a Segoe Fluent icon, ...
    internal static IconInfo OpenFile { get; } = new("\uE8E5"); // OpenFile

    // ... or as an emoji, ...
    internal static IconInfo OpenFileEmoji { get; } = new("📂");

    // ... Or as a path to an image file, ...
    internal static IconInfo FileExplorer { get; } = IconHelpers.FromRelativePath("Assets\\FileExplorer.png");

    // ... which can be on a remote server, or svg's, or ...
    internal static IconInfo FileExplorerSvg { get; } = new("https://raw.githubusercontent.com/microsoft/PowerToys/refs/heads/main/src/modules/cmdpal/Exts/Microsoft.CmdPal.Ext.Indexer/Assets/FileExplorer.svg");

    // Or they can be embedded in a exe / dll:
    internal static IconInfo FolderIcon { get; } =  new("%systemroot%\\system32\\system32\\shell32.dll,3");
}