zoukankan      html  css  js  c++  java
  • 重新想象 Windows 8 Store Apps (30) 信息: 获取包信息, 系统信息, 硬件信息, PnP信息, 常用设备信息

    [源码下载]


    重新想象 Windows 8 Store Apps (30) - 信息: 获取包信息, 系统信息, 硬件信息, PnP信息, 常用设备信息



    作者:webabcd


    介绍
    重新想象 Windows 8 Store Apps 之 信息

    • 获取包信息
    • 获取系统信息
    • 获取硬件信息
    • 获取即插即用(PnP: Plug and Play)的设备的信息
    • 获取常用设备信息



    示例
    1、演示如何获取 app 的 package 信息
    Information/PackageInfo.xaml.cs

    /*
     * 演示如何获取 app 的 package 信息
     */
    
    using System;
    using Windows.ApplicationModel;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Navigation;
    
    namespace XamlDemo.Information
    {
        public sealed partial class PackageInfo : Page
        {
            public PackageInfo()
            {
                this.InitializeComponent();
            }
    
            protected override void OnNavigatedTo(NavigationEventArgs e)
            {
                Package package = Package.Current;
                PackageId packageId = package.Id;
    
                lblMsg.Text = "Name: " + packageId.Name; // 包名
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += "Version: " + packageId.Version; // 版本信息
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += "Architecture: " + packageId.Architecture; // 支持的 cpu 类型(X86, Arm, X64, Neutral(均支持), Unknown)
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += "Publisher: " + packageId.Publisher; // 发布者
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += "PublisherId: " + packageId.PublisherId; // 发布者 id
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += "FullName: " + packageId.FullName; // 包全名(Name + Version + Architecture + PublisherId)
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += "FamilyName: " + packageId.FamilyName; // 包系列名(Name + PublisherId)
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += "Installed Location Path: " + package.InstalledLocation.Path; // 包的安装路径
            }
        }
    }


    2、演示如何获取系统的相关信息
    Information/SystemInfo.xaml.cs

    /*
     * 演示如何获取系统的相关信息
     */
    
    using System;
    using System.Globalization;
    using System.Threading.Tasks;
    using Windows.Devices.Enumeration.Pnp;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Navigation;
    using System.Linq;
    
    namespace XamlDemo.Information
    {
        public sealed partial class SystemInfo : Page
        {
            public SystemInfo()
            {
                this.InitializeComponent();
            }
    
            protected async override void OnNavigatedTo(NavigationEventArgs e)
            {
                lblMsg.Text += "CPU 核心数量:" + Environment.ProcessorCount.ToString();
                lblMsg.Text += Environment.NewLine;
    
                lblMsg.Text += "系统自上次启动以来所经过的毫秒数:" + Environment.TickCount;
                lblMsg.Text += Environment.NewLine;
    
                lblMsg.Text += "当前语言:" + CultureInfo.CurrentCulture.DisplayName;
                lblMsg.Text += Environment.NewLine;
    
                lblMsg.Text += "当前时间:" + DateTime.Now.ToString("yyyy年MM月dd日 HH:mm:ss") + " 星期" + "日一二三四五六七".Substring((int)DateTime.Now.DayOfWeek, 1);
                lblMsg.Text += Environment.NewLine;
    
                lblMsg.Text += "当前时区:" + "UTC" + DateTimeOffset.Now.ToString("%K");
                lblMsg.Text += Environment.NewLine;
    
                lblMsg.Text += "当前系统版本号:" + (await GetWindowsVersionAsync()).ToString();
            }
    
            #region 获取当前系统版本号,摘自:http://attackpattern.com/2013/03/device-information-in-windows-8-store-apps/
            public static async Task<string> GetWindowsVersionAsync()
            {
                var hal = await GetHalDevice(DeviceDriverVersionKey);
                if (hal == null || !hal.Properties.ContainsKey(DeviceDriverVersionKey))
                    return null;
    
                var versionParts = hal.Properties[DeviceDriverVersionKey].ToString().Split('.');
                return string.Join(".", versionParts.Take(2).ToArray());
            }
            private static async Task<PnpObject> GetHalDevice(params string[] properties)
            {
                var actualProperties = properties.Concat(new[] { DeviceClassKey });
                var rootDevices = await PnpObject.FindAllAsync(PnpObjectType.Device,
                    actualProperties, RootQuery);
    
                foreach (var rootDevice in rootDevices.Where(d => d.Properties != null && d.Properties.Any()))
                {
                    var lastProperty = rootDevice.Properties.Last();
                    if (lastProperty.Value != null)
                        if (lastProperty.Value.ToString().Equals(HalDeviceClass))
                            return rootDevice;
                }
                return null;
            }
            const string DeviceClassKey = "{A45C254E-DF1C-4EFD-8020-67D146A850E0},10";
            const string DeviceDriverVersionKey = "{A8B865DD-2E3D-4094-AD97-E593A70C75D6},3";
            const string RootContainer = "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}";
            const string RootQuery = "System.Devices.ContainerId:=\"" + RootContainer + "\"";
            const string HalDeviceClass = "4d36e966-e325-11ce-bfc1-08002be10318";
            #endregion
        }
    }


    3、演示如何获取硬件相关的信息
    Information/HardwareInfo.xaml.cs

    /*
     * 演示如何获取硬件相关的信息
     */
    
    using System;
    using Windows.Security.ExchangeActiveSyncProvisioning;
    using Windows.Storage.Streams;
    using Windows.System.Profile;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Navigation;
    
    namespace XamlDemo.Information
    {
        public sealed partial class HardwareInfo : Page
        {
            public HardwareInfo()
            {
                this.InitializeComponent();
            }
    
            protected override void OnNavigatedTo(NavigationEventArgs e)
            {
                HardwareToken hardwareToken = HardwareIdentification.GetPackageSpecificToken(null);
    
                lblMsg.Text = "Id: " + Buffer2Base64(hardwareToken.Id); // 硬件 ID
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += "Signature: " + Buffer2Base64(hardwareToken.Signature); // 硬件签名
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += "Certificate: " + Buffer2Base64(hardwareToken.Certificate); // 硬件证书
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += Environment.NewLine;
    
    
                EasClientDeviceInformation easClientDeviceInformation = new EasClientDeviceInformation();
    
                lblMsg.Text += "Id: " + easClientDeviceInformation.Id; // 设备 ID
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += Environment.NewLine;
    
                lblMsg.Text += "FriendlyName: " + easClientDeviceInformation.FriendlyName; // 计算机名
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += Environment.NewLine;
    
                lblMsg.Text += "OperatingSystem: " + easClientDeviceInformation.OperatingSystem; // 操作系统
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += Environment.NewLine;
    
                lblMsg.Text += "SystemManufacturer: " + easClientDeviceInformation.SystemManufacturer; // 设备的制造商
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += Environment.NewLine;
    
                lblMsg.Text += "SystemProductName: " + easClientDeviceInformation.SystemProductName; // 设备的产品名
            }
    
            private string Buffer2Base64(IBuffer buffer)
            {
                using (var dataReader = DataReader.FromBuffer(buffer))
                {
                    try
                    {
                        var bytes = new byte[buffer.Length];
                        dataReader.ReadBytes(bytes);
    
                        return Convert.ToBase64String(bytes);
                    }
                    catch (Exception ex)
                    {
                        return ex.ToString();
                    }
                }
            }
        }
    }


    4、演示如何获取即插即用(PnP: Plug and Play)的设备的相关信息
    Information/PnpObjectInfo.xaml

    <Page
        x:Class="XamlDemo.Information.PnpObjectInfo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:XamlDemo.Information"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Grid Background="Transparent">
            <Grid Margin="120 0 0 0">
    
                <ListBox x:Name="listBox" Margin="0 0 10 10">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock FontWeight="Bold" Text="{Binding Name}" />
                                <TextBlock Text="{Binding Id}" />
                                <TextBlock Text="{Binding Properties}" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
                
            </Grid>
        </Grid>
    </Page>

    Information/PnpObjectInfo.xaml.cs

    /*
     * 演示如何获取即插即用(PnP: Plug and Play)的设备的相关信息
     */
    
    using System;
    using Windows.Devices.Enumeration.Pnp;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Navigation;
    
    namespace XamlDemo.Information
    {
        public sealed partial class PnpObjectInfo : Page
        {
            public PnpObjectInfo()
            {
                this.InitializeComponent();
            }
    
            protected async override void OnNavigatedTo(NavigationEventArgs e)
            {
                listBox.Items.Clear();
      
                string[] properties = { "System.ItemNameDisplay", "System.Devices.Manufacturer", "System.Devices.ModelName", "System.Devices.Connected" };
                // 通过 PnpObject.FindAllAsync() 获取所有 PnP 设备的指定的信息(更多的属性名称请参见:http://technet.microsoft.com/zh-cn/library/hh464997.aspx
                var containers = await PnpObject.FindAllAsync(PnpObjectType.DeviceContainer, properties);
    
                // 显示获取到的 PnP 设备的相关信息
                foreach (PnpObject container in containers)
                {
                    listBox.Items.Add(new DisplayItem(container));
                }
            }
    
            /// <summary>
            /// 用于保存 PnP 设备的相关信息
            /// </summary>
            class DisplayItem
            {
                public string Id { get; private set; }
                public string Name { get; private set; }
                public string Properties { get; private set; }
    
                public DisplayItem(PnpObject container)
                {
                    // 该 PnpObject 的名称
                    Name = (string)container.Properties["System.ItemNameDisplay"];
                    if (string.IsNullOrWhiteSpace(Name))
                        Name = "未知";
    
                    // 该 PnpObject 的标识
                    Id = "Id: " + container.Id;
    
                    // 该 PnpObject 的信息
                    foreach (var property in container.Properties)
                    {
                        Properties += property.Key + " = " + property.Value + "\n";
                    }
                }
            }
        }
    }


    5、演示如何获取常用设备的相关信息
    Information/DeviceInfo.xaml

    <Page
        x:Class="XamlDemo.Information.DeviceInfo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:XamlDemo.Information"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Grid Background="Transparent">
            <Grid Margin="120 0 0 0">
    
                <ListBox x:Name="listBox" Margin="0 0 10 10">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Margin="0 0 0 20">
                                <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" />
                                <TextBlock Text="{Binding Path=Id}" />
                                <TextBlock Text="{Binding Path=IsEnabled}" />
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock VerticalAlignment="Center" Text="设备缩略图:" />
                                    <Image Width="256" Height="256" Source="{Binding Path=Thumbnail}" Margin="10 0 0 0" />
                                </StackPanel>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock VerticalAlignment="Center" Text="设备图标:" />
                                    <StackPanel Background="Blue" Margin="10 0 0 0">
                                        <Image Width="48" Height="48" Source="{Binding Path=GlyphThumbnail}" />
                                    </StackPanel>
                                </StackPanel>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
    
            </Grid>
        </Grid>
    </Page>

    Information/DeviceInfo.xaml.cs

    /*
     * 演示如何获取常用设备的相关信息
     */
    
    using System;
    using Windows.Devices.Enumeration;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Media.Imaging;
    using Windows.UI.Xaml.Navigation;
    
    namespace XamlDemo.Information
    {
        public sealed partial class DeviceInfo : Page
        {
            public DeviceInfo()
            {
                this.InitializeComponent();
            }
    
            protected async override void OnNavigatedTo(NavigationEventArgs e)
            {
                listBox.Items.Clear();
    
                // {0ECEF634-6EF0-472A-8085-5AD023ECBCCD} - 打印设备
                // {E5323777-F976-4F5B-9B55-B94699C46E44} - 摄像设备
                // {6AC27878-A6FA-4155-BA85-F98F491D4F33} - 便携设备
    
                // 通过 DeviceInformation.FindAllAsync() - 获取指定类型的设备信息
                var interfaces = await DeviceInformation.FindAllAsync("System.Devices.InterfaceClassGuid:=\"{6AC27878-A6FA-4155-BA85-F98F491D4F33}\"", null); // 获取全部便携设备的设备信息
                // var interfaces = await DeviceInformation.FindAllAsync(DeviceClass.AudioRender); // 通过 DeviceClass 枚举获取指定类型的设备信息
    
                // 显示获取到的常用设备的相关信息
                foreach (DeviceInformation deviceInterface in interfaces)
                {
                    DeviceThumbnail thumbnail = await deviceInterface.GetThumbnailAsync();
                    DeviceThumbnail glyph = await deviceInterface.GetGlyphThumbnailAsync();
    
                    listBox.Items.Add(new DisplayItem(deviceInterface, thumbnail, glyph));
                }
    
                // 创建一个 DeviceWatcher 对象以便在设备发生变化时收到通知
                DeviceWatcher deviceWatcher = DeviceInformation.CreateWatcher();
                // DeviceWatcher 的相关事件有:Added, EnumerationCompleted, Removed, Stopped, Updated
                // DeviceWatcher 的相关方法有:Start(), Stop()
                // DeviceWatcher 的相属性件有:Status(一个 DeviceWatcherStatus 类型的枚举)
            }
    
    
            /// <summary>
            /// 用于保存常用设备的相关信息
            /// </summary>
            class DisplayItem
            {
                public string Name { get; private set; }
                public string Id { get; private set; }
                public string IsEnabled { get; private set; }
                public BitmapImage Thumbnail { get; private set; }
                public BitmapImage GlyphThumbnail { get; private set; }
    
                public DisplayItem(DeviceInformation deviceInterface, DeviceThumbnail thumbnail, DeviceThumbnail glyph)
                {
                    // 设备名称
                    Name = (string)deviceInterface.Properties["System.ItemNameDisplay"];
    
                    // 设备标识
                    Id = "ID: " + deviceInterface.Id;
    
                    // 设备是否已启用
                    IsEnabled = "IsEnabled: " + deviceInterface.IsEnabled;
    
                    // 设备缩略图
                    Thumbnail = new BitmapImage();
                    Thumbnail.SetSource(thumbnail);
    
                    // 设备图标
                    GlyphThumbnail = new BitmapImage();
                    GlyphThumbnail.SetSource(glyph);
                }
            }
        }
    }



    OK
    [源码下载]

  • 相关阅读:
    Spring Cloud Hystrix Dashboard的使用 5.1.3
    Spring Cloud Hystrix 服务容错保护 5.1
    Spring Cloud Ribbon 客户端负载均衡 4.3
    Spring Cloud 如何实现服务间的调用 4.2.3
    hadoop3.1集成yarn ha
    hadoop3.1 hdfs的api使用
    hadoop3.1 ha高可用部署
    hadoop3.1 分布式集群部署
    hadoop3.1伪分布式部署
    KVM(八)使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机
  • 原文地址:https://www.cnblogs.com/webabcd/p/3107404.html
Copyright © 2011-2022 走看看