假設我們現有一個WPF程式,需要支持1903以前的Windows 10版本。同時在1903以後的版本上,額外多出一個Ink的功能。那麼我們就可以通過ApiInformation.IsApiContractPresent方法來判斷1903的API是否可用,決定要不要開放Ink功能給當前用戶。新來的同學 ...
假設我們現有一個WPF程式,需要支持1903以前的Windows 10版本。同時在1903以後的版本上,額外多出一個Ink的功能。
那麼我們就可以通過ApiInformation.IsApiContractPresent方法來判斷1903的API是否可用,決定要不要開放Ink功能給當前用戶。新來的同學如果不知道如何使用“ApiInformation.IsApiContractPresent”,請參考《遷移桌面程式到MS Store(4)——桌面程式調用Win10 API》。
Sample Code我們還是以《遷移桌面程式到MS Store(12)——WPF使用UWP InkToolbar和InkCanvas》中的WPFInkSample.git為例。
首先我們確保Solution中的WPFInkSample工程可以成功編譯並運行。
然後創建一個WPF工程MainUI,添加對WPFInkSample的引用。在MainWindow.xaml.cs中我們想要判斷當前Windows版本是否為1903或以上。如果是1903以上的版本,就通過Process.Start啟動WPFInkSample.exe,否則就彈出MessageBox。
if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 8)) { Process.Start("WPFInkSample.exe"); } else { MessageBox.Show("Since version 1903, we can use UWP control in WPF project."); }
IsApiContractPresent第一個參數是要檢查的API name,第二個參數是主版本號。從Universal device family API contracts的列表中我們可以搜索"Windows.Foundation.UniversalApiContract",會發現在1903版本(version 10.0.18362)中"Windows.Foundation.UniversalApiContract"的version=8.0,而1809版本中version=7.0。
找不到"ApiInformation.IsApiContractPresent"的同學記得在MainUI中添加對Windows.winmd的reference,位於C:\Program Files (x86)\Windows Kits\10\UnionMetadata\<sdk version>\Facade 文件夾。
本篇主要介紹瞭如何在WPF程式中,動態判斷某個Win10 API是否可用。
Github:
https://github.com/manupstairs/WPFInkSample