これは、Windows Universal 8.1の一意のDeviceIDを取得するための古い実装ですが、HardwareIdentificationタイプはもう存在しません。
private static string GetId()
{
var token = HardwareIdentification.GetPackageSpecificToken(null);
var hardwareId = token.Id;
var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
byte[] bytes = new byte[hardwareId.Length];
dataReader.ReadBytes(bytes);
return BitConverter.ToString(bytes).Replace("-", "");
}
これがWindowsデスクトップの完全なソリューションです。
このコードを使用してHardwareIdを取得します。
using System;
using Windows.Security.ExchangeActiveSyncProvisioning;
using Windows.System.Profile;
namespace Tobit.Software.Device
{
public sealed class DeviceInfo
{
private static DeviceInfo _Instance;
public static DeviceInfo Instance
{
get {
if (_Instance == null)
_Instance = new DeviceInfo();
return _Instance; }
}
public string Id { get; private set; }
public string Model { get; private set; }
public string Manufracturer { get; private set; }
public string Name { get; private set; }
public static string OSName { get; set; }
private DeviceInfo()
{
Id = GetId();
var deviceInformation = new EasClientDeviceInformation();
Model = deviceInformation.SystemProductName;
Manufracturer = deviceInformation.SystemManufacturer;
Name = deviceInformation.FriendlyName;
OSName = deviceInformation.OperatingSystem;
}
private static string GetId()
{
if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.System.Profile.HardwareIdentification"))
{
var token = HardwareIdentification.GetPackageSpecificToken(null);
var hardwareId = token.Id;
var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
byte[] bytes = new byte[hardwareId.Length];
dataReader.ReadBytes(bytes);
return BitConverter.ToString(bytes).Replace("-", "");
}
throw new Exception("NO API FOR DEVICE ID PRESENT!");
}
}
}
のようだ
var deviceInformation = new EasClientDeviceInformation();
string Id = deviceInformation.Id.ToString();
EasClientDeviceInformation を参照して、ユニークなIDを提供します。
Idプロパティは、MachineID、ユーザーSID、およびMachineIDがローカルユーザーグループのSIDを使用するパッケージファミリ名のSHA256ハッシュの最初の16バイトから切り捨てられたGUIDを使用してDeviceIdを表します。
ただし、Windowsストアアプリでのみ機能します...そのため、別の解決策が必要です。
IDを取得するはるかに良い方法については、 this Q&A を参照してください。
ハードウェアトークンに対してビルドするには、デスクトップおよび/またはモバイルSDKへの参照を追加する必要があります。実行時にApiInformation
型を使用して、使用する前にAPIが存在するかどうかを照会する必要があります(Xboxなどの他のデバイスファミリにはありません)。
そうは言っても、人々が実際には問題の最善の解決策ではないデバイスIDを要求する場合、所有権が変更されても、寿命全体にわたって物理デバイスを特定する必要がありますか?
EasClientDeviceInformationは、Windows 10モバイルでは機能しません。デバイスIDは、すべての電話で同じです(win10mのすべての顧客は同じGUIDで登録されます)。正しい電話にプッシュメッセージを送信するには、IDが必要です。
//you can use this
//its working with me very fine on windows 10
//replace the Word bios with any hardware name you want
//data also can be found with using windows application named (wbemtest)
using System.Management;
public static async Task<string> ReturnHardWareID()
{
string s = "";
Task task = Task.Run(() =>
{
ManagementObjectSearcher bios = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");
ManagementObjectCollection bios_Collection = bios.Get();
foreach (ManagementObject obj in bios_Collection)
{
s = obj["SerialNumber"].ToString();
break; //break just to get the first found object data only
}
});
Task.WaitAll(task);
return await Task.FromResult(s);
}