1. 程式人生 > >遷移桌面程式到MS Store(4)——桌面程式呼叫Win10 API

遷移桌面程式到MS Store(4)——桌面程式呼叫Win10 API

上一篇我們討論瞭如何在轉制的桌面程式中,通過StartupTask來實現轉製版本的開機自啟動。
實際操作中,我們通過編輯Packaging工程中的Package.appxmanifest檔案,來新增自啟動的配置項。如果要在程式的UI中實現開啟和關閉自啟動的功能。那就需要通過程式碼來操作StartupTask物件。
StarupTask位於Windows.wimd(Windows元資料檔案)中的名稱空間Windows.ApplicationModel。

在桌面程式中呼叫Win10 API一般有以下兩個途徑。
第一種是通過Nuget來安裝一個叫做UwpDesktop的庫,優點是比較簡單,維護起來也方便。
缺點在我看來比較嚴重,這個庫很久沒有更新了,Win10 kits的版本仍停留在14393。要知道即使是推薦給商業客戶用的版本也已經是15063了。

第二種是手動新增引用,這個聽上去麻煩,但只要做過一次就會覺得還是自己動手靠譜。
右鍵選擇給工程Add References,開啟資料夾
C:\Program Files (x86)\Windows Kits\10\UnionMetadata

可以看到上圖存在16299,17134和17763三個版本,我這裡選擇了當前比較普及的17134版本。

僅僅新增這一項是不夠的,另一個必選項是
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll
完成新增引用的操作後,就可以在AutoLaunchApp工程中使用StartupTask類了。

            var startupTask = await StartupTask.GetAsync("AutoLaunchAppTask");
            State = startupTask.State;
            if (IsChecked)
            {
                switch (State)
                {
                    case StartupTaskState.Disabled:
                        // Task is disabled but can be enabled.
State = await startupTask.RequestEnableAsync(); // ensure that you are on a UI thread when you call RequestEnableAsync() break; case StartupTaskState.DisabledByUser: // Task is disabled and user must enable it manually. MessageDialog dialog = new MessageDialog( "You have disabled this app's ability to run " + "as soon as you sign in, but if you change your mind, " + "you can enable this in the Startup tab in Task Manager.", "TestStartup"); await dialog.ShowAsync(); break; case StartupTaskState.DisabledByPolicy: Debug.WriteLine("Startup disabled by group policy, or not supported on this device"); break; } }

邏輯比較簡單,基本就是先獲取StartupTask物件,再根據使用者操作來Enable或Disable,之後返回更新後的StartupTaskState。

如果選擇了14393的SDK版本,就會遺憾地收到一條Warring,雖然也不影響實際效果,但還是感覺怕怕的。

好了,從桌面程式呼叫Win10 API就是這麼簡單,各位大哥能用新的API就儘量別去"Minimun supported client Windows XP"的頁面抄程式碼了,混搭這種年齡差距太大的API,會有代溝的T_T
本篇程式碼依然放在全球最大同性交友平臺GitHub上:
https://github.com/manupstairs/DesktopBridgeSamples.git
話說Github這貨現在姓微軟了……而且他們三哥老大也真是會玩,把Edge也給換心了,根不正苗不紅的。罷了罷了他開心就好。訊息又是JB哥來宣佈的,這位老兄真是去哪哪塌崩,和內森·德雷克一個屬性。