上一篇我们讨论了如何在转制的桌面程序中,通过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哥来宣布的,这位老兄真是去哪哪塌崩,和内森·德雷克一个属性。

迁移桌面程序到MS Store(4)——桌面程序调用Win10 API的更多相关文章

  1. 迁移桌面程序到MS Store(5)——.NET Standard

    接下来的几篇,我想讨论下迁移桌面程序到MS Store,可以采用的比较常见.通用性比较强的实施步骤和分层架构. 通常商业项目一般都是不断的迭代,不太可能突然停止更新现有的桌面版本,然后花很长时间从头来 ...

  2. 迁移桌面程序到MS Store(1)——通过Visual Studio创建Packaging工程

    之前跑去做了一年多的iOS开发,被XCode恶心得不行.做人呢,最重要的是开心.所以我就炒了公司鱿鱼,挪了个窝回头去做Windows开发了.        UWP什么的很久没有正儿八经写了,国内的需求 ...

  3. 迁移桌面程序到MS Store(2)——Desktop App Converter

    迁移传统桌面程序到MS Store的另一种方式是使用Desktop App Converter工具.虽然本篇标题包含了Desktop App Converter(以下简称DAC),实际上我是来劝你别用 ...

  4. 迁移桌面程序到MS Store(8)——通过APPX下载Win32Component

    在上一篇<迁移桌面程序到MS Store(7)——APPX + Service>中,我们提到将desktop application拆分成UI Client+Service两部分.其中UI ...

  5. 迁移桌面程序到MS Store(9)——APPX With Desktop Extension

    在<迁移桌面程序到MS Store(8)——通过APPX下载Win32Component>中我们讨论了通过APPX来下载Service部分的安装包.但是纯UWP的客户端并不能自动运行下载的 ...

  6. 迁移桌面程序到MS Store(10)——在Windows S Mode运行

    首先简单介绍Windows 10 S Mode,Windows在该模式下,只能跑MS Store里的软件,不能通过其他方式安装.好处是安全有保障,杜绝一切国产流氓软件.就像iOS一样,APP进商店都需 ...

  7. 迁移桌面程序到MS Store(12)——WPF使用UWP InkToolbar和InkCanvas

    我们在<迁移桌面程序到MS Store(4)——桌面程序调用Win10 API>提到了对Win10 API的调用,但仍存在无法在WPF中使用UWP控件的问题,虽然都是XAML控件,但却是两 ...

  8. 迁移桌面程序到MS Store(13)——动态检查Win10 API是否可用

    假设我们现有一个WPF程序,需要支持1903以前的Windows 10版本.同时在1903以后的版本上,额外多出一个Ink的功能.那么我们就可以通过ApiInformation.IsApiContra ...

  9. 迁移桌面程序到MS Store(14)——APPX嵌入WCF Service以Admin权限运行

    Windows10 1809版本开始,微软又对UWP开放了新的Capability:AllowElevation. 通过这个新的Capability,UWP APP能够在运行时向用户请求Admin权限 ...

随机推荐

  1. DockerDesktop简单安装和使用

    一.在windows10下,安装DockerDesktop: 1.检查windows版本为企业版或专业版,并开启Hyper-v系统设置:电脑的控制面板->程序->启用或关闭Windows功 ...

  2. 一波水题 MZOJ 1035: 贝克汉姆

    #include <bits/stdc++.h> using namespace std; ; int n,m; int v[N],w[N],f[N]; int main() { scan ...

  3. 47.iOS跳转AppStore评分和发送邮件

    1.跳转到AppStore评分 应用地址是关键:IOS 设备,手机搜索应用,拷贝链接 NSString *appStr =@"https://itunes.apple.com/cn/app/ ...

  4. hdu-1394(线段树&逆序数的性质和求法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题目大意: 给出一个序列,一对逆序数就是满足i<j&&a[i]>a[ ...

  5. lf-8.4 数据的增删改

    MySQL数据操作: DML 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据的删除 ...

  6. 第19章:MongoDB-聚合操作--聚合管道--$limit+$skip

    ①$limit “$limit”:负责数据的取出个数: “$skip”:数据的跨过个数. ②范例:使用“$limit”设置取出的个数

  7. 链家web前端面试

    共有三轮面试,每个面试官的第一个问题都是:介绍一个你觉着比较出彩的项目 第一轮面试: 因为公司项目没什么亮点,很传统的pc端,美女面试官就说让讲一下我用react的私人项目; 问了很多都是关于reac ...

  8. Linux创建一个周期任务来定期删除过期的文件

    一:需求 在开发中存在这样的情况,为了防止文件的误删,不允许开发人员直接删除项目中要用到的文件,而是将它们移动到某个目录,然后由一个周期任务去检测并删除内部过期的文件: 二:检测文件是否是过期文件 有 ...

  9. TCP、UDP之三次握手四次挥手

    1. http协议的简介 HTTP,HyperText Transfer Protocol.超文本传输协议,是互联网上应用最为广泛的一种网络协议.基于TCP的协议,HTTP是一个客户端和服务器端请求和 ...

  10. (转)使用 vs.php 调试PHP

    转自:http://www.jb51.net/article/24618.htm   早先在asp横行的年代,php和asp一样,大都都是html中夹杂代码,说实话,这时候IDE的确用处不是很大,倒是 ...