Windows 8 Store Apps学习(30) 信息2013-12-06 cnblogs webabcd信息: 获取包信息, 系统信息, 硬件信息, PnP信息, 常用设备信息介绍重新想象 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; // 发布者 idlblMsg.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.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); // 硬件 IDlblMsg.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); // 硬件证书}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();}}}}}