• 迁移桌面程序到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 Kits10UnionMetadata

    可以看到上图存在16299,17134和17763三个版本,我这里选择了当前比较普及的17134版本。

    仅仅添加这一项是不够的,另一个必选项是
    C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETCorev4.5System.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哥来宣布的,这位老兄真是去哪哪塌崩,和内森·德雷克一个属性。

  • 相关阅读:
    python(7)-pycharm mac和windows专业版安装破解
    Navicat Premium15激活 安装与激活(转载) 有效!!
    PHP 冒泡排序
    PHP 插入排序 -- 希尔排序
    PHP 插入排序 -- 折半查找
    PHP 插入排序 -- 直接插入排序
    PHP 哈夫曼的实现
    PHP call_user_func的一些用法和注意点
    PHP 组件注册的例子
    PHP 奇葩的debug_zval_dump的输出
  • 原文地址:https://www.cnblogs.com/manupstairs/p/10150464.html
Copyright © 2020-2023  润新知