【Windows 8 Store App】学习一:获取设备信息

原文 http://www.cnblogs.com/java-koma/archive/2013/05/22/3093306.html

通常情况下我们需要知道用户设备的一些信息:deviceId, os version, 设备制造商, 设备型号。

下面的代码用于获取设备的信息。(注:代码源于网络)

	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; }

	}

 

调用:

var deviceInfo = await DeviceInfoHelper.GetDeviceInfoAsync();

// DeviceID: 307416080***************************************************

// DeviceOS: 6.2-Microsoft Corporation-Surface with Windows RT-Computer.Tablet


可以看到我的设备是一台Sruface平板。

你可能感兴趣的:(windows)