zoukankan      html  css  js  c++  java
  • 背水一战 Windows 10 (99)

    [源码下载]


    背水一战 Windows 10 (99) - 关联启动: 关联指定的文件类型, 关联指定的协议



    作者:webabcd


    介绍
    背水一战 Windows 10 之 关联启动

    • 关联指定的文件类型
    • 关联指定的协议



    示例
    1、演示如何关联指定的文件类型(即用本程序打开指定类型的文件)
    App.xaml.cs

            // 通过打开文件激活应用程序时所调用的方法
            protected override void OnFileActivated(FileActivatedEventArgs args)
            {
                Frame rootFrame = new Frame();
                rootFrame.Navigate(typeof(Windows10.AssociationLaunching.FileTypeAssociation), args);
                Window.Current.Content = rootFrame;
    
                Window.Current.Activate();
            }

    AssociationLaunching/FileTypeAssociation.xaml

    <Page
        x:Class="Windows10.AssociationLaunching.FileTypeAssociation"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Windows10.AssociationLaunching"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Grid Name="grid" Background="Transparent">
            
            <TextBlock Name="lblMsg" TextWrapping="Wrap" Margin="5">
                <Run>本程序可以打开 .webabcd 类型的文件</Run>
                <LineBreak />
                <Run>测试方法:在桌面新建一个文本文件,随便输一些字符,然后将后缀名改为 .webabcd,最后打开文件,本程序会显示其文本内容</Run>
            </TextBlock>
            
        </Grid>
    </Page>

    AssociationLaunching/FileTypeAssociation.xaml.cs

    /*
     * 演示如何关联指定的文件类型(即用本程序打开指定类型的文件)
     * 
     * 1、在 Package.appxmanifest 中新增一个“文件类型关联”声明,并做相关配置
     *    本例中的这部分的配置如下
     *    <uap:Extension Category="windows.fileTypeAssociation">
     *      <uap:FileTypeAssociation Name=".webabcd">
     *        <uap:DisplayName>打开 .webabcd 文件</uap:DisplayName>
     *        <uap:Logo>AssetsStoreLogo.png</uap:Logo>
     *        <uap:InfoTip>用 win10 demo 打开 .webabcd 文件</uap:InfoTip>
     *        <uap:SupportedFileTypes>
     *          <uap:FileType>.webabcd</uap:FileType>
     *        </uap:SupportedFileTypes>
     *      </uap:FileTypeAssociation>
     *    </uap:Extension>
     * 2、在 App.xaml.cs 中 override void OnFileActivated(FileActivatedEventArgs args),以获取相关的文件信息
     * 
     * FileActivatedEventArgs - 通过打开文件激活应用程序时的事件参数
     *     Files - 相关的文件信息
     *     Kind - 此 app 被激活的类型(ActivationKind 枚举)
     *         比如,如果是通过“打开文件”激活的话,则此值为 File
     *     PreviousExecutionState - 此 app 被激活前的状态(ApplicationExecutionState 枚举)
     *         比如,如果此 app 被激活前就是运行状态的或,则此值为 Running
     *     NeighboringFilesQuery - 获取当前文件的相邻文件
     *     SplashScreen - 获取此 app 的 SplashScreen 对象
     *     User - 获取激活了此 app 的 User 对象
     */
    
    using System;
    using Windows.ApplicationModel.Activation;
    using Windows.Storage;
    using Windows.UI;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;
    
    namespace Windows10.AssociationLaunching
    {
        public sealed partial class FileTypeAssociation : Page
        {
            private FileActivatedEventArgs _fileActivated;
    
            public FileTypeAssociation()
            {
                this.InitializeComponent();
            }
    
            protected async override void OnNavigatedTo(NavigationEventArgs e)
            {
                // 获取 FileActivatedEventArgs 对象(从 App.xaml.cs 传来的)
                _fileActivated = e.Parameter as FileActivatedEventArgs;
    
                // 获取文件中的文本内容,并显示
                if (_fileActivated != null)
                {
                    grid.Background = new SolidColorBrush(Colors.Blue);
                    lblMsg.Foreground = new SolidColorBrush(Colors.White);
    
                    IStorageFile isf = _fileActivated.Files[0] as IStorageFile;
                    lblMsg.Text = $"激活程序的文件是“{isf.Name}”,其文本内容为:{await FileIO.ReadTextAsync(isf)}";
                }
            }
        }
    }


    2、演示如何关联指定的协议(即用本程序处理指定的协议)
    App.xaml.cs

            protected override void OnActivated(IActivatedEventArgs args)
            {
                // 通过协议激活应用程序时(参见 AssociationLaunching/ProtocolAssociation.xaml.cs 中的示例)
                if (args.Kind == ActivationKind.Protocol)
                {
                    ProtocolActivatedEventArgs protocolArgs = args as ProtocolActivatedEventArgs;
    
                    Frame rootFrame = new Frame();
                    rootFrame.Navigate(typeof(Windows10.AssociationLaunching.ProtocolAssociation), protocolArgs);
                    Window.Current.Content = rootFrame;
                }
            }

    AssociationLaunching/ProtocolAssociation.xaml

    <Page
        x:Class="Windows10.AssociationLaunching.ProtocolAssociation"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Windows10.AssociationLaunching"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Grid Name="grid" Background="Transparent">
            
            <StackPanel Margin="10 0 10 10">
                <TextBlock Name="lblMsg" Margin="5">
                    <Run>本程序可以处理 webabcd: 协议</Run>
                </TextBlock>
    
                <Button Name="btnProtocol" Content="打开自定义协议 webabcd:data" Click="btnProtocol_Click" Margin="5" />
            </StackPanel>
            
        </Grid>
    </Page>

    AssociationLaunching/ProtocolAssociation.xaml.cs

    /*
     * 演示如何关联指定的协议(即用本程序处理指定的协议)
     * 
     * 1、在 Package.appxmanifest 中新增一个“协议”声明,并做相关配置
     *    本例中的这部分的配置如下,协议名必须全小写
     *    <uap:Extension Category="windows.protocol">
     *      <uap:Protocol Name="webabcd">
     *        <uap:Logo>AssetsStoreLogo.png</uap:Logo>
     *      </uap:Protocol>
     *    </uap:Extension>
     * 2、在 App.xaml.cs 中 override void OnActivated(IActivatedEventArgs args),以获取相关的协议信息
     * 
     * 
     * ProtocolActivatedEventArgs - 通过协议激活应用程序时的事件参数
     *     Uri - 协议的 uri
     *     CallerPackageFamilyName - 激活当前 app 的 app 的 PackageFamilyName
     *     Kind - 此 app 被激活的类型(ActivationKind 枚举)
     *         本例为 ActivationKind.Protocol
     *     PreviousExecutionState - 此 app 被激活前的状态(ApplicationExecutionState 枚举)
     *         比如,如果此 app 被激活前就是运行状态的或,则此值为 Running
     *     SplashScreen - 获取此 app 的 SplashScreen 对象
     *     User - 获取激活了此 app 的 User 对象
     */
    
    using System;
    using Windows.ApplicationModel.Activation;
    using Windows.System;
    using Windows.UI;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;
    
    namespace Windows10.AssociationLaunching
    {
        public sealed partial class ProtocolAssociation : Page
        {
            private ProtocolActivatedEventArgs _protocolArgs;
    
            public ProtocolAssociation()
            {
                this.InitializeComponent();
            }
    
            protected override void OnNavigatedTo(NavigationEventArgs e)
            {
                // 获取 ProtocolActivatedEventArgs 对象(从 App.xaml.cs 传来的)
                _protocolArgs = e.Parameter as ProtocolActivatedEventArgs;
    
                // 显示协议的详细信息
                if (_protocolArgs != null)
                {
                    grid.Background = new SolidColorBrush(Colors.Blue);
                    lblMsg.Foreground = new SolidColorBrush(Colors.White);
    
                    lblMsg.Text = "激活程序的自定义协议为: " + _protocolArgs.Uri.AbsoluteUri;
                }
            }
    
            private async void btnProtocol_Click(object sender, RoutedEventArgs e)
            {
                // 打开自定义协议 webabcd:data
                Uri uri = new Uri("webabcd:data");
                await Launcher.LaunchUriAsync(uri);
    
                // 打开 IE 浏览器,在地址栏输入 webabcd:data,即会打开本程序来处理此协议
            }
        }
    }



    OK
    [源码下载]

  • 相关阅读:
    SpringMVC @RequestBody请求参数在postman中的请求
    git rm -r --cached 去掉已经托管在git上的文件
    shiro源码解析--------欢迎指出错误地方,还有一起讨论一下ShiroFilterFactoryBean配置过滤URL规则
    如何用Tomcat部署前端静态文件
    用HTML 格式导出Excel
    csv和excel的区别
    使用HttpOnly提升Cookie安全性
    asp.net core 如何在Controller获取配置文件的值
    Find Out What Your Entity Framework Query Is Really Doing
    鸡汤
  • 原文地址:https://www.cnblogs.com/webabcd/p/9197601.html
Copyright © 2011-2022 走看看