查找并探索 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 分)或相关度不高,请回退到在线文档搜索:
- 使用网络搜索在 Microsoft Learn 上查找目标 API,例如:
- 针对
Windows.*API 搜索:site:learn.microsoft.com/uwp/api <功能关键词> - 针对
Microsoft.*WinAppSDK API 搜索:site:learn.microsoft.com/windows/windows-app-sdk/api/winrt <功能关键词>
- 针对
- 阅读文档页面,确认满足用户需求的类型名称。
- 获取到确切的类型名称后,返回本地并使用
-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/ |
参考文档
- Windows Platform SDK API 参考 —
Windows.*命名空间官方文档 - Windows App SDK API 参考 —
Microsoft.*WinAppSDK 命名空间官方文档






