.NET 6學習筆記(4)——如何在.NET 6的Desktop App中使用Windows Runtime API

Windows Runtime API是當初某軟為了區別Win32 API,力挺UWP而創建的另一套Windows 10專用的API集合。後來因為一些原因,UWP沒火。為了不埋沒很有價值的Windows Runtime API,某軟只好允許.NET Framework的程式調用Windows Runtime API,我們在《遷移桌面程式到MS Store(4)——桌面程式調用Win10 API》中討論過。
而從.NET 5開始,新.NET中Desktop App調用WinRT runtime的方式又發生了變化。總體來說更簡單了,今天我們就一起來實踐一番。
首先我們創建一個新的Console工程。Framework選擇.NET 6。除了學習性質的個人項目,否則我只推薦Long-term support的版本,商業性質的項目發布出去以後,突然對應版本的.NET Runtime官方支援周期到了,是比較滑稽的。

在這樣一個Console的程式中,我打算訪問一個常見的WinRT API:Windows.Devices.Raidos命名空間下的Radio類。當然我們也可以通過Win32 API去操作藍牙,可如果僅希望開、關和查詢藍牙狀態這樣的簡單操作,Win32 API就顯得有些蛋疼了。

而Radio類對.NET 程式而言,就顯得友好許多。首先讓我們右鍵編輯project文件。

 將默認的:

<TargetFramework>net6.0</TargetFramework>

更改為對應具體Windows SDK版本:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0-windows10.0.22000.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

其中SDK版本的對應關係如下:
• net6.0-windows10.0.17763.0: 對應 Windows 10, version 1809.
• net6.0-windows10.0.18362.0: 對應 Windows 10, version 1903.
• net6.0-windows10.0.19041.0: 對應 Windows 10, version 2004.
• net6.0-windows10.0.22000.0: 對應 Windows 11.
完成這一步之後,即可像UWP程式里一樣,通過using添Windows.Devices.Raidos命名空間,來直接使用WinRT API了。

using Windows.Devices.Radios;

// See //aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");


foreach (var radio in await Radio.GetRadiosAsync())
{
    Console.WriteLine($"Name:{radio.Name}, Kind:{radio.Kind}, State:{radio.State}");
}

Console.ReadLine();

是不是又一次覺得啊軟這回能Make desktop great again!這個現在還不好說,但學習一下如何開發現代化的Desktop App總不是壞事。

附上Github鏈接:

manupstairs/WinRTApiInNet6: Introduce how to use WinRT API in .NET 6 project. (github.com)

以下鏈接,是MS Learn上Windows開發的入門課程,單個課程三十分鐘到60分鐘不等,想要補充基礎知識的同學點這裡:

開始使用 Visual Studio 開發 Windows 10 應用

開發 Windows 10 應用程式

編寫首個 Windows 10 應用

創建 Windows 10 應用的用戶介面 (UI)

增強 Windows 10 應用的用戶介面

在 Windows 10 應用中實現數據綁定

Tags: