winmd-api-search

winmd-api-search

热门

查找并探索 Windows 桌面 API。适合在开发需要系统/平台能力(如摄像头、文件访问、系统通知、UI 控件、AI/ML、传感器、网络连接等)的功能时使用。能够根据具体需求精准匹配目标 API,并获取完整的类型细节(包括方法、属性、事件及枚举值)。

3.7万Star
4593Fork
更新于 2026/7/17
SKILL.md
只读
名称
winmd-api-search
描述

查找并探索 Windows 桌面 API。适合在开发需要系统/平台能力(如摄像头、文件访问、系统通知、UI 控件、AI/ML、传感器、网络连接等)的功能时使用。能够根据具体需求精准匹配目标 API,并获取完整的类型细节(包括方法、属性、事件及枚举值)。

WinMD API Search

本 Skill 旨在帮助你快速找到满足特定需求的 Windows API 并获取其完整详细信息。它会检索包含以下来源的本地 WinMD 元数据缓存:

  • Windows Platform SDK — 所有 Windows.* WinRT API(始终可用,无需 restore)
  • WinAppSDK / WinUI — 缓存生成器中已内置此基线(始终可用,无需 restore)
  • NuGet 包 — 已 restore 项目中包含 .winmd 文件的任何附加软件包
  • 项目输出的 WinMD — 构建产物中包含 .winmd 的类库(C++/WinRT、C#)

哪怕在一个刚拉取的全新仓库中(未执行 restore 或 build),你依然能够获得完整覆盖的 Platform SDK + WinAppSDK 元数据。

使用场景

  • 想要实现某个功能,需要查找哪款 API 提供了对应的系统能力
  • 用户询问“如何实现 X 功能?”,其中 X 涉及平台能力(如摄像头、文件、通知、传感器、AI 等)
  • 在编写代码前,需要了解某个类型的精确方法、属性、事件或枚举值
  • 不确定在 UI 或系统任务中应该使用哪个控件、类或接口

前置条件

  • .NET SDK 8.0 或更高版本 — 编译生成缓存工具所需。若未安装,请前往 dotnet.microsoft.com 下载安装。

缓存配置(首次使用前必做)

所有的查询与搜索命令都是基于本地 JSON 缓存运行的。在执行任何查询之前,必须先生成缓存。

# 针对仓库中的所有项目(首次运行推荐)
.\.github\skills\winmd-api-search\scripts\Update-WinMdCache.ps1

# 针对单个项目
.\.github\skills\winmd-api-search\scripts\Update-WinMdCache.ps1 -ProjectDir <project-folder>

对于基础覆盖(Platform SDK + WinAppSDK),无需对项目进行 restore 或 build。若需要支持额外的 NuGet 包,项目需完成 dotnet restore(用于生成 project.assets.json)或包含 packages.config 文件。

缓存保存在 Generated Files\winmd-cache\ 目录下,并按“包+版本号”进行了去重处理。

索引内容

来源 何时可用
Windows Platform SDK 始终可用(直接读取本地 SDK 安装)
WinAppSDK(最新版) 始终可用(已内置在缓存生成器中作为基线)
WinAppSDK Runtime 系统中已安装时(通过 Get-AppxPackage 检测)
项目 NuGet 包 执行 dotnet restore 后或包含 packages.config 时
项目输出的 .winmd 完成项目构建后(针对会生成 WinMD 的类库)

注意: 缓存目录应当添加到 .gitignore 中 —— 它是自动生成的产物,无需纳入版本控制。

使用指南

请根据实际情况选择对应的使用路径:


探索模式 — “我不确定该用哪个 API”

当用户使用自然语言描述某个功能时,你需要找出匹配的 API。

0. 确认缓存已建立

如果缓存尚未生成,请先运行 Update-WinMdCache.ps1 —— 参见上文的缓存配置(首次使用前必做)。

1. 将用户口语转化为搜索关键词

将用户的日常表达映射为编程专业术语。建议尝试多种变体组合:

用户表达 建议尝试的搜索关键词(按顺序)
"take a picture"(拍照) camera, capture, photo, MediaCapture
"load from disk"(从磁盘加载文件) file open, picker, FileOpen, StorageFile
"describe what's in it"(识别/描述内容) image description, Vision, Recognition
"show a popup"(弹窗显示) dialog, flyout, popup, ContentDialog
"drag and drop"(拖拽) drag, drop, DragDrop
"save settings"(保存设置) settings, ApplicationData, LocalSettings

优先尝试简单的日常词汇。如果搜索结果不理想或相关度较低,再使用更偏技术的词汇。

2. 执行搜索命令

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

该命令会返回按匹配度排序的命名空间、最佳匹配类型以及对应的 JSON 文件路径。

如果搜索结果得分较低(低于 60 分)或相关度不高,请回退到在线文档搜索:

  1. 使用网络搜索在 Microsoft Learn 上查找目标 API,例如:
    • 针对 Windows.* API 搜索:site:learn.microsoft.com/uwp/api <功能关键词>
    • 针对 Microsoft.* WinAppSDK API 搜索:site:learn.microsoft.com/windows/windows-app-sdk/api/winrt <功能关键词>
  2. 阅读文档页面,确认满足用户需求的类型名称。
  3. 获取到确切的类型名称后,返回本地并使用 -Action members 或 -Action enums 查看具体的本地方法/属性签名。

3. 读取 JSON 获取所需 API

从搜索结果中找到排名靠前项的 JSON 文件路径并读取。该 JSON 包含了该命名空间下的所有类型 —— 完整成员、参数签名、返回值类型以及枚举值。

阅读内容并评估哪些类型和成员最契合用户需求。

4. 查阅官方文档补充上下文

本地缓存仅包含代码签名,不包含说明文字或使用示例。如需了解详细解释、示例代码或注意事项,请在 Microsoft Learn 上查找对应类型:

命名空间前缀 文档 Base URL
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}

例如,Microsoft.UI.Xaml.Controls.NavigationView 对应的文档链接为:
https://learn.microsoft.com/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.navigationview

5. 结合 API 知识解答或编写代码


精确查找 — “已知 API 名称,查看详细信息”

当你已经明确(或推测出)类型或命名空间名称时,可以直接进行查找:

# 获取已知类型的全部成员
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action members -TypeName "Microsoft.UI.Xaml.Controls.NavigationView"

# 获取枚举值
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action enums -TypeName "Microsoft.UI.Xaml.Visibility"

# 列出命名空间下的所有类型
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action types -Namespace "Microsoft.UI.Xaml.Controls"

# 浏览命名空间
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action namespaces -Filter "Microsoft.UI"

如果你需要的详细程度超出了 -Action members 的展示范围,可以使用 -Action search 获取 JSON 文件路径,随后直接读取对应的 JSON 文件。


其他可用命令

# 列出已缓存的项目
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action projects

# 列出某个项目引入的包
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action packages

# 查看统计数据
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action stats

如果缓存中仅包含一个项目,系统会自动选择 -Project。
若存在多个项目,请显式传入 -Project <name>(可先使用 -Action projects 查看可用项目名称)。
在扫描模式下,清单名称会自动附带一段短哈希后缀以避免命名冲突;只要名称不存在歧义,你也可以直接传入不带后缀的基础项目名。

搜索打分机制

搜索系统会将类型名称和成员名称与你的查询关键词进行比对排序:

得分 匹配类型 示例
100 完全匹配 Button → Button
80 前缀匹配(Starts with) Navigation → NavigationView
60 包含匹配(Contains) Dialog → ContentDialog
50 帕斯卡命名首字母匹配 ASB → AutoSuggestBox
40 多关键词 AND 联合匹配 navigation item → NavigationViewItem
20 模糊字符匹配 NavVw → NavigationView

搜索结果按命名空间归类分组,得分更高的命名空间优先展示。

常见问题与排错

问题现象 解决方法
"Cache not found"(未找到缓存) 运行 Update-WinMdCache.ps1 生成缓存
"Multiple projects cached"(包含多个项目缓存) 增加 -Project <name> 参数
"Namespace not found"(未找到命名空间) 使用 -Action namespaces 查看所有可用命名空间
"Type not found"(未找到类型) 请使用全限定类型名(例如 Microsoft.UI.Xaml.Controls.Button)
NuGet 更新后数据过期 重新运行 Update-WinMdCache.ps1
缓存文件提交到了 git 在 .gitignore 中加入 Generated Files/

参考文档