1

我需要在 Metro UI 应用程序中获取网络接口的 MAC 地址。据我所知,.NET 4.5 for Metro 应用程序 API 根本不支持这一点。我错了吗?

4

3 回答 3

5

您无法按说法检索 MAC 地址,但您可以检索硬件特定信息来识别机器。

这是讨论该主题的完整 msdn 文章:Guidance on using the App Specific Hardware ID (ASHWID) to implementation per-device app logic (Windows)

请注意仅使用您需要的信息而不是完整的 id,因为它可能会根据对您无用的信息(例如 Dock Station 字节)而改变。

这是一个基于几个字节(CPU id、内存大小、磁盘设备的序列号和 bios)计算设备 id 的代码示例:

string deviceSerial = string.Empty;
// http://msdn.microsoft.com/en-us/library/windows/apps/jj553431
Windows.System.Profile.HardwareToken hardwareToken = Windows.System.Profile.HardwareIdentification.GetPackageSpecificToken(null);
using (DataReader dataReader = DataReader.FromBuffer(hardwareToken.Id))
{
    int offset = 0;
    while (offset < hardwareToken.Id.Length)
    {
        byte[] hardwareEntry = new byte[4];
        dataReader.ReadBytes(hardwareEntry);

        // CPU ID of the processor || Size of the memory || Serial number of the disk device || BIOS
        if ((hardwareEntry[0] == 1 || hardwareEntry[0] == 2 || hardwareEntry[0] == 3 || hardwareEntry[0] == 9) && hardwareEntry[1] == 0)
        {
            if (!string.IsNullOrEmpty(deviceSerial))
            {
                deviceSerial += "|";
            }
            deviceSerial += string.Format("{0}.{1}", hardwareEntry[2], hardwareEntry[3]);
        }
        offset += 4;
    }
}

Debug.WriteLine("deviceSerial=" + deviceSerial);
于 2012-11-23T08:57:10.817 回答
0

您被限制从 Metro Style 应用程序访问低级网络信息,因此这对于股票 SDK是不可能的。这是设计使然。

于 2012-07-28T04:56:41.127 回答
-3
    private void getDeviceInfos()
    {
        Profiles = Windows.Networking.Connectivity.NetworkInformation.GetConnectionProfiles();
        Adapter = Profiles[0].NetworkAdapter;

        Guid AdapterId = Adapter.NetworkAdapterId;
    }
    IReadOnlyList<Windows.Networking.Connectivity.ConnectionProfile> Profiles;
    Windows.Networking.Connectivity.NetworkAdapter Adapter;
于 2012-09-16T23:42:15.177 回答