[源码下载]

背水一战 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>Assets\StoreLogo.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[] 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>Assets\StoreLogo.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
[源码下载]

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

  1. 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Application Data 中的媒体

    [源码下载] 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Ap ...

  2. 背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理

    [源码下载] 背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理 作者:webabcd 介绍背水一战 Windows 10 ...

  3. 与众不同 windows phone (38) - 8.0 关联启动: 使用外部程序打开一个文件或URI, 关联指定的文件类型或协议

    [源码下载] 与众不同 windows phone (38) - 8.0 关联启动: 使用外部程序打开一个文件或URI, 关联指定的文件类型或协议 作者:webabcd 介绍与众不同 windows ...

  4. 背水一战 Windows 10 (98) - 关联启动: 使用外部程序打开一个文件, 使用外部程序打开一个 Uri

    [源码下载] 背水一战 Windows 10 (98) - 关联启动: 使用外部程序打开一个文件, 使用外部程序打开一个 Uri 作者:webabcd 介绍背水一战 Windows 10 之 关联启动 ...

  5. 重新想象 Windows 8 Store Apps (33) - 关联启动: 使用外部程序打开一个文件或uri, 关联指定的文件类型或协议

    原文:重新想象 Windows 8 Store Apps (33) - 关联启动: 使用外部程序打开一个文件或uri, 关联指定的文件类型或协议 [源码下载] 重新想象 Windows 8 Store ...

  6. 背水一战 Windows 10 (2) - UI: 概述, 启动屏幕, 屏幕方向

    [源码下载] 背水一战 Windows 10 (2) - UI: 概述, 启动屏幕, 屏幕方向 作者:webabcd 介绍背水一战 Windows 10 之 UI UI 设计概述 启动屏幕(闪屏) 屏 ...

  7. 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用

    [源码下载] 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用 作者:weba ...

  8. 背水一战 Windows 10 (122) - 其它: 通过 Windows.System.Profile 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口

    [源码下载] 背水一战 Windows 10 (122) - 其它: 通过 Windows.System.Profile 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口 作者 ...

  9. 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒

    [源码下载] 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒 作者:webabcd ...

随机推荐

  1. srs之深入浅出看流媒体

    本文转载:https://blog.csdn.net/zjqlovell/article/details/50786040 CDN这几年爆炸式增长,带宽提速是根源,而HTTP始终还是那个屌样,因此目前 ...

  2. Django ORM 常用字段和参数

    Django ORM 常用字段和参数 一:常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. I ...

  3. Numpy 线性代数

    Numpy 提供了线性代数库 linalg , 该库包含了线性代数所需的所有功能,可以看卡下面的说明: 函数 描述 dot 两个数组的点积, 即元素对应相乘 vdot 两个向量的点积 inner 两个 ...

  4. 1. String可调用方法

    class str(basestring): """ str(object='') -> string Return a nice string represent ...

  5. 图解Go的channel底层原理

    废话不多说,直奔主题. channel的整体结构图 简单说明: buf是有缓冲的channel所特有的结构,用来存储缓存数据.是个循环链表 sendx和recvx用于记录buf这个循环链表中的发送或者 ...

  6. java之路 把1到100之间的数的偶数相加

    /** *把1到100之间的数的偶数相加 */ class Demo{ public static void main(String[] args){ int i =1; int sum = 0; d ...

  7. DOM生成XML文件

    /** * 从数据库读取学生信息的数据集合,然后Dom创建数据树,再转成XML格式数据,输出生成xml文件 * @author pikaqiu * */ public class TestGenXml ...

  8. 根据缺少的so,安装相关的软件

    http://blog.csdn.net/dianyueneo/article/details/8161350. ubuntu缺少libGL.so sudo apt-get install apt-f ...

  9. django中views中方法的request参数

    知其然亦要知其所以然 views每个方法的参数都是request,那么问题来了,request为何物? 首先,几乎每个方法都是取数据(无论是从数据库,还是从第三方接口),然后进行一定的处理,之后传给前 ...

  10. centos7 防火墙相关命令

    启动:systemctl start firewalld禁用:systemctl stop firewalld重新载入规则:firewall-cmd --reload查看所有打开的端口:firewal ...