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
    [源码下载]

  • 相关阅读:
    android 启动报错
    android 百度地图
    android LayoutInflater使用
    spring mvc No mapping found for HTTP request with URI [/web/test.do] in DispatcherServlet with name 'spring'
    sql mysql和sqlserver存在就更新,不存在就插入的写法(转)
    jsp include
    json 解析
    css
    Scrapy组件之item
    Scrapy库安装和项目创建
  • 原文地址:https://www.cnblogs.com/webabcd/p/3107404.html
Copyright © 2011-2022 走看看