[源码下载] http://files.cnblogs.com/webabcd/Windows10.rar
背水一战 Windows 10 (99) - 关联启动: 关联指定的文件类型, 关联指定的协议
关联指定的文件类型
关联指定的协议
示例
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[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>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
[源码下载] http://files.cnblogs.com/webabcd/Windows10.rar
背水一战 Windows 10 (99) - 关联启动: 关联指定的文件类型, 关联指定的协议
来源: http://www.bubuko.com/infodetail-2650106.html