Freigeben über


Erweiterungsbeispiele

Die Befehlspalette bietet ein vollständiges Erweiterungsmodell, mit dem Entwickler eigene Erfahrungen für die Palette erstellen können.

Die neuesten Beispiele finden Sie im Beispielprojekt in GitHub. Es enthält aktuelle Beispiele für alles, was mit der Befehlspalette möglich ist.

Erstellen eines Befehls zum Ausführen eines Vorgangs

Erstellen Sie eine Klasse, die IInvokableCommand implementiert, und implementieren Sie die Invoke-Methode . Diese Methode wird aufgerufen, wenn der Benutzer den Befehl in der Befehlspalette auswählt.

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();
    }
}

Erstellen einer Seite mit Befehlen

Das folgende Beispiel zeigt, wie Sie eine Seite mit Befehlen erstellen. Diese Seite wird angezeigt, wenn der Benutzer den Befehl "Öffnen" in der Befehlspalette auswählt:

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

Ikonen

Symbole, die die IIconInfo-Klasse verwenden, können auf verschiedene Arten angegeben werden. Hier sind einige Beispiele:


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");
}