【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平板。

转载于:https://www.cnblogs.com/java-koma/archive/2013/05/22/3093306.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值