背水一戰 Windows 10 (99) - 關聯啓動: 關聯指定的文件類型, 關聯指定的協議

[源碼下載]


html

背水一戰 Windows 10 (99) - 關聯啓動: 關聯指定的文件類型, 關聯指定的協議



做者:webabcd


介紹
背水一戰 Windows 10 之 關聯啓動html5

  • 關聯指定的文件類型
  • 關聯指定的協議



示例
一、演示如何關聯指定的文件類型(即用本程序打開指定類型的文件)
App.xaml.csc++

        // 經過打開文件激活應用程序時所調用的方法
        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.xamlweb

<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.csexpress

/*
 * 演示如何關聯指定的文件類型(即用本程序打開指定類型的文件)
 * 
 * 一、在 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>
 * 二、在 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)}";
            }
        }
    }
}


二、演示如何關聯指定的協議(即用本程序處理指定的協議)
App.xaml.cswindows

        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.csapp

/*
 * 演示如何關聯指定的協議(即用本程序處理指定的協議)
 * 
 * 一、在 Package.appxmanifest 中新增一個「協議」聲明,並作相關配置
 *    本例中的這部分的配置以下,協議名必須全小寫
 *    <uap:Extension Category="windows.protocol">
 *      <uap:Protocol Name="webabcd">
 *        <uap:Logo>Assets\StoreLogo.png</uap:Logo>
 *      </uap:Protocol>
 *    </uap:Extension>
 * 二、在 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
[源碼下載]asp.net

相關文章
相關標籤/搜索