Windows7中JumpList的实现

简介:







Windows7就要发布了,近期,就要和MS组织一次社区Win7发布活动,正好这次也讲Win7TaskBar开发,所以就把要讲的东西组织成Blog,分享给出来,以供参考。

对于 Windows7 TaskBar 的开发功能是基于 COM 组件来实现的,这些组织提供了操作 Windos7 特性的一些功能。开发人员只要对 COM 操作就可以,但更为幸福的是,微软已经开发出一些 kit ,我们直接用这些 kit ,就可以用 C# Windos7 的新功能进行编程了。
对于这个 kit ,可以从
其中的 WindowsAPICodePack RegistrationHelper 是封装 TaskBar 操作的项目,我们直接用他们的 dll exe 就可以。
在做 JumpList 时,我们用到 Microsoft.WindowsAPICodePack.dll Microsoft.WindowsAPICodePack.Shell.dll Windows7.DesktopIntegration.Registration.exe
当新建一个 WPF 应用程序时,需要在引用中添加这三个可执行文件。
在对任务栏编和前,先来认识一下 ApplicationID ,在 Win7 中, ApplicationID 不是窗口的唯一标识,也不是它的 GUID ApplicationID 只是一串用来标识窗体的字符串。它最大长度为 128 个字符,我们来命名 ApplicationID 时,遵循的约定为“ Company.Product.SubProduct.Version ”。这个 ApplicationID 可以和进程,程序的快捷方式,窗体, JumpList ,文档注册类型等关联起来。
在用 ApplicationID 以前,必需先注册它,本质上这个注册是对注册表的操作。
具体代如下:
        static RegistryKey classesRoot;
        private static void RegisterProgId(string progId, string appId,
            string openWith)
        {
            RegistryKey progIdKey = classesRoot.CreateSubKey(progId);
            progIdKey.SetValue("FriendlyTypeName", "@shell32.dll,-8975");
            progIdKey.SetValue("DefaultIcon", "@shell32.dll,-47");
            progIdKey.SetValue("CurVer", progId);
            progIdKey.SetValue("AppUserModelID", appId);
            RegistryKey shell = progIdKey.CreateSubKey("shell");
            shell.SetValue(String.Empty, "Open");decimal
            shell = shell.CreateSubKey("Open");
            shell = shell.CreateSubKey("Command");
            shell.SetValue(String.Empty, openWith);
            shell.Close();
            progIdKey.Close();
}
 
关于 Win7 TaskBar 有几种效果,下面分别来说一下。
JumpList
效果图如下。
 
在图中,下方的三个选项是系统默认就有的,常用和任务,则是必需写代码来完成的。其实 JumpList 就是提供了一组快键方式。并且对快键方式进行分组分类。
首先来说一下添加和清除任务项,任务就是应用程序外的其他小工具的便键调用。
首先要注册一下 ApplicationID ,名称为
TaskbarManager.Instance.ApplicationId = "MS.TaskBarDemo.JumpList.1.0";       
要有一个 JumpList 对象
     private Microsoft.WindowsAPICodePack.Taskbar.JumpList jumplist = Microsoft.WindowsAPICodePack.Taskbar.JumpList.CreateJumpList();
    jumplist.Refresh();
现在来实现添加任务列表
string systemFolder = Environment.GetFolderPath(Environment.SpecialFolder.System);
// 创建计算器
  IJumpListTask calcTask = new JumpListLink(Path.Combine(systemFolder, "calc.exe"), " 打开计算器 ")
     {
       IconReference = new IconReference(Path.Combine(systemFolder, "calc.exe"), 0)
  };
     jumplist.AddUserTasks(calcTask, new JumpListSeparator());
 jumplist.Refresh();
清除任务列表如下
            jumplist.ClearAllUserTasks();
        jumplist.Refresh();
上面这些类,都是 Microsoft.WindowsAPICodePack.dll Microsoft.WindowsAPICodePack.Shell.dll 封装的,这两个项目都是开源的。其实真正添加任务的工作(包括后面自定义 Category )都是 jumplist.Refresh() 这个方法完成的。
不防我们来看一下,运用 VS 地“转到定义”会转到一个名为“ TaskbarCOMInterfaces ”的一个页面。
其中有如下代码:
[ComImportAttribute()]
    [GuidAttribute("6332DEBF-87B5-4670-90C0-5E57B408A49E")]
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
    internal interface ICustomDestinationList
    {
        ……
        [PreserveSig]
        HRESULT AddUserTasks(
            [MarshalAs(UnmanagedType.Interface)] IObjectArray poa);
        ……
    }
可以看到,在 win7 中, JumpList 的编程是通过 COM 组件来实现的。
我为简单,建议开发时用 MS 封装好的 Kit ,这样编程更高效。
自定义 Category ,通常是把自己的类型或系统识别的类型添加成快捷方式。操作代码如下:
  // 创建自己定义 Category
        JumpListCustomCategory myCategory;
        private void AddCategory_But_Click(object sender, RoutedEventArgs e)
        {
            myCategory = new JumpListCustomCategory(“Category 名称 ”);
            jumplist.AddCustomCategories(myCategory);            
            jumplist.Refresh();
        }
 
        // 创建子类型
        private void subCategory_BUT_Click(object sender, RoutedEventArgs e)
        {
            string path =  Assembly.GetExecutingAssembly().Location;
            JumpListItem jli = new JumpListItem(path); 
            myCategory.AddJumpListItems(jli);   
            jumplist.Refresh();
        }
 
        // 创建子连接
        private void addLink_BUT_Click(object sender, RoutedEventArgs e)
        {
            string path = @"F://a.wmv";
            JumpListLink jll = new JumpListLink(path, " 连接 ");
            myCategory.AddJumpListItems(jll);
            jumplist.Refresh();           
        }




















本文转自桂素伟51CTO博客,原文链接: http://blog.51cto.com/axzxs/214292,如需转载请自行联系原作者








相关文章
|
API C# Windows
WPF 4 开发Windows 7 跳转列表(JumpList)
原文:WPF 4 开发Windows 7 跳转列表(JumpList)      在之前写过的《Windows 7 任务栏开发系列》中我们通过Visual Studio 2008 借助微软提供的Windows API Code Pack 对应用程序的任务栏进行开发,即将到来的Visual Studio 2010 为我们提供了更方便的开发方式,新版本的WPF 4 只需要通过XAML 代码即可实现Windows 7 任务栏的特性。
937 0
|
23天前
|
安全 关系型数据库 MySQL
Windows Server 安装 MySQL 8.0 详细指南
安装 MySQL 需要谨慎,特别注意安全配置和权限管理。根据实际业务需求调整配置,确保数据库的性能和安全。
120 9
|
2月前
|
网络安全 Windows
Windows server 2012R2系统安装远程桌面服务后无法多用户同时登录是什么原因?
【11月更文挑战第15天】本文介绍了在Windows Server 2012 R2中遇到的多用户无法同时登录远程桌面的问题及其解决方法,包括许可模式限制、组策略配置问题、远程桌面服务配置错误以及网络和防火墙问题四个方面的原因分析及对应的解决方案。
154 4
|
2月前
|
监控 安全 网络安全
使用EventLog Analyzer日志分析工具监测 Windows Server 安全威胁
Windows服务器面临多重威胁,包括勒索软件、DoS攻击、内部威胁、恶意软件感染、网络钓鱼、暴力破解、漏洞利用、Web应用攻击及配置错误等。这些威胁严重威胁服务器安全与业务连续性。EventLog Analyzer通过日志管理和威胁分析,有效检测并应对上述威胁,提升服务器安全性,确保服务稳定运行。
|
2月前
|
监控 安全 网络安全
Windows Server管理:配置与管理技巧
Windows Server管理:配置与管理技巧
123 3
|
2月前
|
存储 安全 网络安全
Windows Server 本地安全策略
由于广泛使用及历史上存在的漏洞,Windows服务器成为黑客和恶意行为者的主要攻击目标。这些系统通常存储敏感数据并支持关键服务,因此组织需优先缓解风险,保障业务的完整性和连续性。常见的威胁包括勒索软件、拒绝服务攻击、内部威胁、恶意软件感染等。本地安全策略是Windows操作系统中用于管理计算机本地安全性设置的工具,主要包括用户账户策略、安全选项、安全设置等。实施强大的安全措施,如定期补丁更新、网络分段、入侵检测系统、数据加密等,对于加固Windows服务器至关重要。
100 1
|
3月前
|
边缘计算 安全 网络安全
|
3月前
|
数据安全/隐私保护 Windows
安装 Windows Server 2019
安装 Windows Server 2019
|
3月前
|
网络协议 Windows
Windows Server 2019 DHCP服务器搭建
Windows Server 2019 DHCP服务器搭建