【Windows 8 Store App】学习一:获取设备信息
通常情况下我们需要知道用户设备的一些信息:deviceId, os version, 设备制造商, 设备型号。
下面的代码用于获取设备的信息。(注:代码源于网络)
DeviceInfoHelper public class DeviceInfoHelper { public async static Task<DeviceInfo> GetDeviceInfoAsync() { DeviceInfo info = new DeviceInfo(); info.DeviceID = GetDeviceID(); info.DeviceOS = (await GetWindowsVersionAsync()) + "-" + (await GetDeviceManufacturerAsync()) + "-" + (await GetDeviceModelAsync()) + "-" + (await GetDeviceCategoryAsync()); return info; } public static string GetDeviceID() { HardwareToken packageSpecificToken = HardwareIdentification.GetPackageSpecificToken(null); var hardwareId = packageSpecificToken.Id; var _internalId = ""; var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId); var array = new byte[hardwareId.Length]; dataReader.ReadBytes(array); for (var i = 0; i < array.Length; i++) { _internalId += array[i].ToString(); } return _internalId; } const string ItemNameKey = "System.ItemNameDisplay"; const string ModelNameKey = "System.Devices.ModelName"; const string ManufacturerKey = "System.Devices.Manufacturer"; const string DeviceClassKey = "{A45C254E-DF1C-4EFD-8020-67D146A850E0},10"; const string PrimaryCategoryKey = "{78C34FC8-104A-4ACA-9EA4-524D52996E57},97"; 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"; public static async Task<ProcessorArchitecture> GetProcessorArchitectureAsync() { var halDevice = await GetHalDevice(ItemNameKey); if (halDevice != null && halDevice.Properties[ItemNameKey] != null) { var halName = halDevice.Properties[ItemNameKey].ToString(); if (halName.Contains("x64")) return ProcessorArchitecture.X64; if (halName.Contains("ARM")) return ProcessorArchitecture.Arm; return ProcessorArchitecture.X86; } return ProcessorArchitecture.Unknown; } public static Task<string> GetDeviceManufacturerAsync() { return GetRootDeviceInfoAsync(ManufacturerKey); } public static Task<string> GetDeviceModelAsync() { return GetRootDeviceInfoAsync(ModelNameKey); } public static Task<string> GetDeviceCategoryAsync() { return GetRootDeviceInfoAsync(PrimaryCategoryKey); } public static async Task<string> GetWindowsVersionAsync() { // There is no good place to get this. // The HAL driver version number should work unless you're using a custom HAL... 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<string> GetRootDeviceInfoAsync(string propertyKey) { var pnp = await PnpObject.CreateFromIdAsync(PnpObjectType.DeviceContainer, RootContainer, new[] { propertyKey }); return (string)pnp.Properties[propertyKey]; } 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; } } public class DeviceInfo { public string DeviceID { get; set; } public string DeviceOS { get; set; } }
调用:
Callervar deviceInfo = await DeviceInfoHelper.GetDeviceInfoAsync(); // DeviceID: 307416080*************************************************** // DeviceOS: 6.2-Microsoft Corporation-Surface with Windows RT-Computer.Tablet
可以看到我的设备是一台Sruface平板。