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 完全匹配 ButtonButton
80 前缀匹配(Starts with) NavigationNavigationView
60 包含匹配(Contains) DialogContentDialog
50 帕斯卡命名首字母匹配 ASBAutoSuggestBox
40 多关键词 AND 联合匹配 navigation itemNavigationViewItem
20 模糊字符匹配 NavVwNavigationView

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

常见问题与排错

问题现象 解决方法
"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/

参考文档