zoukankan      html  css  js  c++  java
  • 迁移桌面程序到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哥来宣布的,这位老兄真是去哪哪塌崩,和内森·德雷克一个属性。

  • 相关阅读:
    关于unicode编码问题——[ASIS 2019]Unicorn shop
    cve-2020-7066 ssrf漏洞——GKCTF2020
    updatexml()报错注入——[极客大挑战 2019]HardSQL
    用户名和密码分开检验产生的mysql注入——[GXYCTF2019]BabySQli
    安恒月赛——Ezunserialize(反序列化字符逃逸)
    记一次Flask模板注入学习 [GYCTF2020]FlaskApp
    [CISCN2019 华北赛区 Day2 Web1]Hack World
    [SUCTF 2019]CheckIn(user.ini文件构成的php后门)
    sql注入用<>绕过被过滤的select ——百度杯9月第二场SQL
    剑指offer32 从上到下打印二叉树(叁)
  • 原文地址:https://www.cnblogs.com/manupstairs/p/10150464.html
Copyright © 2011-2022 走看看