winmd-api-search

Par github · awesome-copilot

Trouvez et explorez les API de bureau Windows. À utiliser lors de la création de fonctionnalités nécessitant des capacités de la plateforme — caméra, accès aux fichiers, notifications, contrôles d'interface, IA/ML, capteurs, réseau, etc. Découvrez la bonne API pour une tâche et récupérez les détails complets des types (méthodes, propriétés, événements, valeurs d'énumération).

npx skills add https://github.com/github/awesome-copilot --skill winmd-api-search

Recherche d'API WinMD

Cette skill vous aide à trouver l'API Windows appropriée pour n'importe quelle capacité et à obtenir ses détails complets. Elle recherche dans un cache local de toutes les métadonnées WinMD provenant de :

  • Windows Platform SDK — toutes les API WinRT Windows.* (toujours disponible, aucune restauration requise)
  • WinAppSDK / WinUI — fourni en tant que base dans le générateur de cache (toujours disponible, aucune restauration requise)
  • Packages NuGet — tous les packages supplémentaires dans les projets restaurés contenant des fichiers .winmd
  • WinMD de sortie de projet — bibliothèques de classes (C++/WinRT, C#) qui produisent .winmd comme sortie de build

Même sur un clone frais sans restauration ni build, vous bénéficiez d'une couverture complète du Platform SDK + WinAppSDK.

Quand utiliser cette skill

  • L'utilisateur souhaite construire une fonctionnalité et vous devez trouver quelle API fournit cette capacité
  • L'utilisateur demande « comment faire X ? » où X implique une fonctionnalité de plateforme (caméra, fichiers, notifications, capteurs, IA, etc.)
  • Vous avez besoin des méthodes, propriétés, événements ou valeurs d'énumération exacts d'un type avant d'écrire du code
  • Vous êtes incertain du contrôle, de la classe ou de l'interface à utiliser pour une tâche UI ou système

Prérequis

  • .NET SDK 8.0 ou ultérieur — requis pour construire le générateur de cache. Installez depuis dotnet.microsoft.com si non disponible.

Configuration du cache (requise avant première utilisation)

Toutes les commandes de requête et recherche lisent depuis un cache JSON local. Vous devez générer le cache avant d'exécuter des requêtes.

# Tous les projets du référentiel (recommandé pour la première exécution)
.\.github\skills\winmd-api-search\scripts\Update-WinMdCache.ps1

# Projet unique
.\.github\skills\winmd-api-search\scripts\Update-WinMdCache.ps1 -ProjectDir <project-folder>

Aucune restauration de projet ni build n'est requise pour la couverture de base (Platform SDK + WinAppSDK). Pour les packages NuGet supplémentaires, le projet a besoin de dotnet restore (qui génère project.assets.json) ou d'un fichier packages.config.

Le cache est stocké à Generated Files\winmd-cache\, dédupliqué par package+version.

Ce qui est indexé

Source Quand disponible
Windows Platform SDK Toujours (lit depuis l'installation SDK locale)
WinAppSDK (latest) Toujours (fourni en tant que base dans le générateur de cache)
WinAppSDK Runtime Quand installé sur le système (détecté via Get-AppxPackage)
Packages NuGet du projet Après dotnet restore ou avec packages.config
Project-output .winmd Après build du projet (bibliothèques de classes qui produisent WinMD)

Remarque : ce répertoire de cache doit être dans .gitignore — il est généré, pas source.

Comment utiliser

Choisissez le chemin qui correspond à la situation :


Découverte — « Je ne sais pas quelle API utiliser »

L'utilisateur décrit une capacité dans ses propres termes. Vous devez trouver l'API appropriée.

0. Assurez-vous que le cache existe

Si le cache n'a pas encore été généré, exécutez Update-WinMdCache.ps1 d'abord — voir Configuration du cache ci-dessus.

1. Traduire le langage utilisateur → mots-clés de recherche

Mappez le langage quotidien de l'utilisateur aux termes de programmation. Essayez plusieurs variations :

L'utilisateur dit Mots-clés de recherche à essayer (dans l'ordre)
« prendre une photo » camera, capture, photo, MediaCapture
« charger depuis le disque » file open, picker, FileOpen, StorageFile
« décrire ce qu'il contient » image description, Vision, Recognition
« afficher une fenêtre contextuelle » dialog, flyout, popup, ContentDialog
« glisser-déposer » drag, drop, DragDrop
« enregistrer les paramètres » settings, ApplicationData, LocalSettings

Commencez par des mots simples et courants. Si les résultats sont faibles ou non pertinents, essayez la variation plus technique.

2. Exécuter les recherches

.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action search -Query "<keyword>"

Cela retourne les espaces de noms classés avec les types correspondants principaux et le chemin du fichier JSON.

Si les résultats ont des scores bas (en dessous de 60) ou sont non pertinents, retournez à la recherche dans la documentation en ligne :

  1. Utilisez la recherche web pour trouver l'API appropriée sur Microsoft Learn, par exemple :
    • site:learn.microsoft.com/uwp/api <capability keywords> pour les API Windows.*
    • site:learn.microsoft.com/windows/windows-app-sdk/api/winrt <capability keywords> pour les API WinAppSDK Microsoft.*
  2. Lisez les pages de documentation pour identifier quel type correspond à l'exigence de l'utilisateur.
  3. Une fois que vous connaissez le nom du type, revenez et utilisez -Action members ou -Action enums pour obtenir les signatures exactes locales.

3. Lire le JSON pour choisir l'API appropriée

Lisez le fichier au(x) chemin(s) des résultats principaux. Le JSON contient tous les types de cet espace de noms — tous les membres, signatures, paramètres, types de retour, valeurs d'énumération.

Lisez et décidez quels types et membres correspondent à l'exigence de l'utilisateur.

4. Consulter la documentation officielle pour le contexte

Le cache contient uniquement les signatures — pas de descriptions ou conseils d'utilisation. Pour les explications, exemples et remarques, consultez le type sur Microsoft Learn :

Préfixe d'espace de noms URL de base de documentation
Windows.* https://learn.microsoft.com/uwp/api/{fully.qualified.typename}
Microsoft.* (WinAppSDK) https://learn.microsoft.com/windows/windows-app-sdk/api/winrt/{fully.qualified.typename}

Par exemple, Microsoft.UI.Xaml.Controls.NavigationView correspond à : https://learn.microsoft.com/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.navigationview

5. Utiliser la connaissance de l'API pour répondre ou écrire du code


Recherche — « Je connais l'API, montrez-moi les détails »

Vous connaissez déjà (ou soupçonnez) le nom du type ou de l'espace de noms. Allez directement :

# Obtenir tous les membres d'un type connu
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action members -TypeName "Microsoft.UI.Xaml.Controls.NavigationView"

# Obtenir les valeurs d'énumération
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action enums -TypeName "Microsoft.UI.Xaml.Visibility"

# Lister tous les types d'un espace de noms
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action types -Namespace "Microsoft.UI.Xaml.Controls"

# Parcourir les espaces de noms
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action namespaces -Filter "Microsoft.UI"

Si vous avez besoin de plus de détails au-delà de ce que -Action members montre, utilisez -Action search pour obtenir le chemin du fichier JSON, puis lisez le fichier JSON directement.


Autres commandes

# Lister les projets mis en cache
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action projects

# Lister les packages d'un projet
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action packages

# Afficher les statistiques
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action stats

Si un seul projet est mis en cache, -Project est auto-sélectionné. S'il existe plusieurs projets, ajoutez -Project <name> (utilisez -Action projects pour voir les noms disponibles). En mode scan, les noms de manifest incluent un suffixe de hash court pour éviter les collisions ; vous pouvez passer le nom du projet de base sans le suffixe s'il est sans ambiguïté.

Scoring de recherche

La recherche classe les noms de types et les noms de membres par rapport à votre requête :

Score Type de correspondance Exemple
100 Nom exact ButtonButton
80 Commence par NavigationNavigationView
60 Contient DialogContentDialog
50 Initiales PascalCase ASBAutoSuggestBox
40 Multi-mot ET navigation itemNavigationViewItem
20 Correspondance de caractères floue NavVwNavigationView

Les résultats sont groupés par espace de noms. Les espaces de noms avec un score plus élevé apparaissent en premier.

Dépannage

Problème Solution
« Cache non trouvé » Exécutez Update-WinMdCache.ps1
« Plusieurs projets mis en cache » Ajoutez -Project <name>
« Espace de noms non trouvé » Utilisez -Action namespaces pour lister les disponibles
« Type non trouvé » Utilisez le nom pleinement qualifié (par ex., Microsoft.UI.Xaml.Controls.Button)
Obsolète après mise à jour NuGet Réexécutez Update-WinMdCache.ps1
Cache dans l'historique git Ajoutez Generated Files/ à .gitignore

Références

Skills similaires