winmd-api-search

winmd-api-search

熱門

尋找與探索 Windows 桌面 API。在開發需要平台功能(例如相機、檔案存取、通知、UI 控制項、AI/ML、感測器、網路等)的功能時使用。能為指定任務找出合適的 API,並擷取完整的型別詳細資訊(方法、屬性、事件、列舉值)。

3.7萬星標
4593分支
更新於 2026/7/17
SKILL.md
唯讀
名稱
winmd-api-search
描述

尋找與探索 Windows 桌面 API。在開發需要平台功能(例如相機、檔案存取、通知、UI 控制項、AI/ML、感測器、網路等)的功能時使用。能為指定任務找出合適的 API,並擷取完整的型別詳細資訊(方法、屬性、事件、列舉值)。

WinMD API Search

這項 Skill 能協助你為任何功能找到合適的 Windows API 并取得其完整詳細資訊。它會搜尋包含下列來源所有 WinMD 元資料(metadata)的本機快取:

  • Windows Platform SDK — 所有 Windows.* WinRT API(隨時可用,無需執行還原)
  • WinAppSDK / WinUI — 已作為基準預先打包於快取產生器中(隨時可用,無需執行還原)
  • NuGet 套件 — 已還原專案中任何包含 .winmd 檔案的附加套件
  • 專案輸出的 WinMD — 建置後會產生 .winmd 的類別庫(C++/WinRT、C#)

即使是在剛複製(clone)下來、尚未執行還原或建置的全新專案中,你依然能享有完整的 Platform SDK + WinAppSDK API 涵蓋範圍。

何時使用此 Skill

  • 使用者想要開發某項功能,而你需要找出哪一個 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),無需還原專案或進行建置。若要包含額外的 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. 將使用者用語轉換為搜尋關鍵字

將使用者的日常用語對照至程式設計術語,嘗試多種不同的關鍵字組合:

使用者說 建議嘗試的搜尋關鍵字(按順序)
「拍照」 camera, capture, photo, MediaCapture
「從磁碟載入」 file open, picker, FileOpen, StorageFile
「描述圖片內容」 image description, Vision, Recognition
「顯示快顯視窗/彈窗」 dialog, flyout, popup, ContentDialog
「拖放」 drag, drop, DragDrop
「儲存設定」 settings, ApplicationData, LocalSettings

先從簡單的日常詞彙開始。如果搜尋結果相關度不高或效果不好,再嘗試更偏技術的詞彙。

2. 執行搜尋

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

此命令會回傳排序後的命名空間、最符合的型別,以及 JSON 檔案路徑。

若搜尋結果的 比分過低(低於 60)或不相關,請改為搜尋線上文件:

  1. 使用 Web 搜尋在 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 包含了該命名空間下的所有型別——完整的成員、簽章、參數、回傳型別與列舉值。

研讀內容並判斷哪些型別與成員符合使用者的需求。

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 檢視可用名稱)。
在掃描模式下,清單名稱會包含短雜湊(hash)字尾以避免命名衝突;若無歧義,你可以傳入不帶字尾的基底專案名稱。

搜尋計分機制

搜尋演算法會針對你的查詢字串,對型別名稱與成員名稱進行比分比對與排序:

比分 比對類型 範例
100 完全相同 Button → Button
80 開頭符合 Navigation → NavigationView
60 包含字串 Dialog → ContentDialog
50 PascalCase 首字母 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 歷史紀錄 將 Generated Files/ 加入 .gitignore

參考資料