【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

时间:2022-09-07 08:42:41

Windows 10 10586 出来了也挺久的了,应该大部分都从 10240 升级到这个版本了。在 10586 中,微软添加了 200 多个新的 API,具体 API 的变动,大家可以点击下面这个链接来看:

http://martinsuchan.github.io/ApiPeek/Diffs/win10.10240.to.win10.10586.fulldiff.html

其中不乏许多人都感兴趣的 HoloLens 的 API。不过现在连工程机都没几个人有的情况下(而且出了我也买不起【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)),我还是看一下有什么实用点的 API 了吧→_→。粗略翻阅一下,JumpList(我称它为跳转列表)这个算是相当有用的了。

打开 Visual Studio 2015 Update 1,新建一个空白的 UWP 工程,然后在项目上右键 → 属性。

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

或许有些小伙伴还是分不清这两个的含义和区别,这里我稍微说明下:

目标版本是指你能使用的 API 的版本,JumpList 这个 API 是 10586 的,因此这里如果你选择的是 10240 就没法用了。

而最低版本则是用户能安装你这个 APP 的版本,只有等于或高于的用户才能安装。

那么你又会问了,像上面图片这样的,10240 的用户安装了这个 APP,然后运行到 10586 的 API 的代码会怎样。答案就是会产生一个异常,但是,微软也给出了相应的解决方案,那就是在调用这些 API 之前先检查是不是能用,这个类就是 ApiInformation

由于 ApiInformation 类的方法的参数都是字符串形式的,我们很容易敲错,因此在这里,我先强烈推荐一个代码分析器!!!

https://www.nuget.org/packages/PlatformSpecific.Analyzer/

代码分析器是 VS 2015 的新功能,是基于 roslyn 的,roslyn 这个东西比较复杂,这里我就不班门弄斧了。像一般的 nuget 包那样安装就行了。

安装完之后是这样的:

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

在 MSDN 上我们可以看到,JumpList 目前是只支持 Desktop 的,IsSupported 正是为了检测这个。https://msdn.microsoft.com/zh-cn/library/mt608936(v=win.10).aspx

那么写下如下代码:

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

可以看见代码被标注了绿色的波浪线,这个就是我前面为什么要安装分析器的原因。然后点击小灯泡后选择第一项。代码就会变成下面那样:

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

此时波浪线也消失了,这样 10240 的机器就不会调用到里面代码,而 10586 或以上的机器就能调用到里面的代码。

接下来我们可以调用 JumpList 的 LoadCurrentAsync 方法来读取该 APP 的跳转列表。

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

然后可以获取到 JumpList 的实例了。

JumpList 类有三个实例成员:

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

Items 属性是指里面的项,SaveAsync 方法一眼就看出是保存。SystemGroupKind 我先不管放一边,最后再管它。

然后对 Items 属性操作一下,最后调用保存:

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

运行之后,任务栏:

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

开始菜单:

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

开始屏幕(也就是开始菜单右侧磁贴部分):

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

然后断点 App.xaml.cs 之后,点击 JumpList 的测试这个项后会触发 OnLaunched 方法。

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

所以在 OnLaunched 里面处理 JumpList 传递过来的参数跟二级磁贴的方式是相同的。

接下来先回去看一下 JumpListItem,有如下成员:

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

Arguments 是参数,OnLaunched 中会获取到这个值。

Description 这个就相当于 ToolTip,如下图:

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

DisplayName 就是项显示的名称。

GroupName 就是这一项归属与哪一个组,如下图:

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

如果 GroupName 为空字符串就会被分配在“任务”这里。

Kind 是一个只读属性,一个枚举类型:

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

指示这个 Item 是项还是分隔线。

Logo 这个很好懂,就是项前面那个小图标。不过需要注意的是,仅支持 ms-appx:///ms-appdata:///local/ 这两个协议,http:// 是不支持的,但我们可以把图片下载下来嘛。

RemovedByUser 是一个只读属性,我们是没法修改它的,根据 MSDN 的描述:https://msdn.microsoft.com/zh-cn/library/windows.ui.startscreen.jumplistitem.aspx (Remarks 部分),自定义组中的 Item 右键会有一个删除的选项,此时这个属性就会被系统设置为 true。

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)

那么用户点击这个之后,这个 Item 就会从跳转列表中消失。但是,也仅仅是用户看不见,JumpList 实例中的 Item 还是存在,并且 RemovedByUser 是被设置为 true。这个时候我们程序猿就需要从 JumpList 中删除掉这个 Item 了。

另外特别要注意的是,DisplayNameDescriptionGroupName 这三个属性是支持本地化的。

假设在项目根目录建立 Resources.resw 文件,并假设有 LocalName 这么一项,那么可以将属性值设置为 ms-resource:///Resources/LocalName。

Item 的成员就到此解释完了。那接下来就把上面 JumpList 先忽略的 SystemGroupKind 属性给说了。

根据 MSDN 的描述:https://msdn.microsoft.com/zh-cn/library/windows.ui.startscreen.jumplist.aspx (Example 部分)

假设 APP 关联了文件协议的话,APP 是会自动产生 JumpList 的。

而这个 SystemGroupKind 枚举属性就是定义这个行为的,None 表示不自动产生,Frequent则表示最常用的文件,Recent 则表示最近使用的文件。默认的话是 Recent。

不过需要注意的是,这个属于系统行为,自动产生的这些项是不包含在 JumpList 的 Item 中的,如果不需要系统提供的话,设置为 None 就好了。

本文就此结束,如果需要 Demo,可以去看微软官方的 Demo:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/JumpList

JumpList 可以在文件处理型的 APP 中使用(例如云端记事本这种),或者取代二级磁贴(当然 JumpList 只能在 Desktop 上使用这点请注意)。希望大家能活用 JumpList 写出优秀的 APP。

【Win10】探索 Windows 10 10586 之 JumpList(跳转列表)的更多相关文章

  1. 背水一战 Windows 10 (92) - 文件系统: 读写“最近访问列表”和“未来访问列表”, 管理以及使用索引

    [源码下载] 背水一战 Windows 10 (92) - 文件系统: 读写“最近访问列表”和“未来访问列表”, 管理以及使用索引 作者:webabcd 介绍背水一战 Windows 10 之 文件系 ...

  2. 探索Windows 10的CFG机制

    转载https://www.anquanke.com/post/id/85493 0x00 前言 随着操作系统开发人员一直在增强漏洞利用的缓解措施,微软在Windows 10和Windows 8.1 ...

  3. Windows 10 10586 升级

  4. Windows 10简体中文最新预览版Build 9926

    Windows 10 消费者预览版全新特性: • 全新的开始菜单Win 10的开始菜单产生了较大改变,磁贴界面在原有磁贴概念的基础上进行了大幅度的调整,新的磁贴界面开始支持纵向滚动,并可以利用开始按钮 ...

  5. FFmpegInterop 库在 Windows 10 应用中的编译使用

    FFmpegInterop 简介 FFmpegInterop 是微软推出的封装 FFmpeg 的一个开源库,旨在方便在 Windows 10.Windows 8.1 以及 Windows Phone ...

  6. 跳过从Win7/8升级,直接格式化全新安装 Windows 10 并自动永久激活系统的方法教程

    跳过升级,直接激活全新 Win10 的方法步骤教程: 下载 Windows 10 系统的 ISO 镜像 在你当前的 Win7 / Win 8 / 8.1 系统中,使用 DaemonTools 或右键选 ...

  7. zz Windows 10安装教程:硬盘安装Win10 系统步骤(适合32位和64位)

    Windows 10安装教程:硬盘安装Win10 系统步骤(适合32位和64位) Posted on 2015年01月28日 by 虾虾 22 Comments   最新的Windows 10 MSD ...

  8. Windows 10正式版密钥大全,Win10激活序列号KEY大全

    最新放出来的Win10密钥:NJ4MX-VQQ7Q-FP3DB-VDGHX-7XM87 MH37W-N47XK-V7XM9-C7227-GCQG9 VK7JG-NPHTM-C97JM-9MPGT-3V ...

  9. windows 10最新版镜像资源下载 Win10 ISO下载教程

    最近发现原创写的文章被无良爬走,而且变成了无图尬文,所以开头附上原文地址: http://www.cnblogs.com/xueyudlut/p/7497975.html -------------- ...

随机推荐

  1. 35.Android之带删除按钮EditText学习

    今天实现Android里自定义带删除功能的EditText,效果如下: 当输入内容时,EditText变为带有一个删除功能按钮的编辑框,如图: 实现代码很简单,直接上代码, 布局文件xml: < ...

  2. AHB中split机制简介

    完整的AHB协议:1)可以多个master,并且需要外加一个Arbiter,和write multiplexor.为了保证每一时刻只有一个master拥有访问权. 2)为了增强pipeline的能力, ...

  3. CCS3属性之text-overflow&colon;ellipsis&semi;的用法和注意之处

    语法: text-overflow:clip | ellipsis 默认值:clip 适用于:所有元素 clip: 当对象内文本溢出时不显示省略标记(...),而是将溢出的部分裁切掉. ellipsi ...

  4. 【LeetCode OJ】Palindrome Partitioning II

    Problem Link: http://oj.leetcode.com/problems/palindrome-partitioning-ii/ We solve this problem by u ...

  5. JavaScript事件基础知识总结【思维导图】

    另外附上来自Nicholas C.Zakas<JavaScript高级程序设计 第3版>中的跨浏览器兼容EventUtil对象. var EventUtil = { //注册事件 addH ...

  6. mac上eclipse上运行word count

    1.打开eclipse之后,建立wordcount项目 package wordcount; import java.io.IOException; import java.util.StringTo ...

  7. apk反编译&lpar;7&rpar;用ProGuard混淆代码,初级防止反编译

    eclipse为例 1,project.properties去掉 #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:pro ...

  8. 数据库开发 MySQL

    MySQL是Web世界中使用最广泛的数据库服务器.SQLite的特点是轻量级.可嵌入,但不能承受高并发访问,适合桌面和移动应用.而MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也 ...

  9. HDOJ --- 2577

    How to Type Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...

  10. c&colon;set 存值

    <c:forEach items="${appoint}" var="appoint"> <c:set var="begin&quo ...