2012-07-27 45 views
1

我有要求在我的Metro UI應用程序中獲取網絡接口的MAC地址。據我所知,這在.NET 4.5 for Metro應用程序API中不受支持。我錯了嗎?可能在.NET Metro應用程序中獲取網絡MAC地址?

+0

的目的是什麼,你所需要的MAC地址?也許有問題的替代解決方案。 – 2012-09-16 23:44:47

+0

這是一個「好的」持久計算機標識符。是的,人們可以欺騙MAC地址,但很少有同一本地網絡中的兩個系統具有完全相同的MAC地址,這是我們所需要的。 – Jippers 2012-09-17 20:24:49

回答

0

您正在訪問的低級別的網絡從一個Metro風格的應用程序信息的限制,因此,這是不可能與股票SDK。這是設計。

+0

悲傷的臉:(但我想要的MAC地址 – Jippers 2012-07-30 17:55:47

-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; 
+0

這有助於獲得MAC地址? – 2012-09-16 23:44:27

+2

編號給出一個GUID。 – Jippers 2012-09-17 20:25:14

5

您不能檢索MAC地址每說,但您可以檢索硬件特定的信息來識別機器。

下面是一個完整的MSDN文章討論的主題:Guidance on using the App Specific Hardware ID (ASHWID) to implement per-device app logic (Windows)

小心使用你需要的信息,而不是完整的ID,因爲它可能修改是對你沒用(如碼頭信息例如站字節)。

下面是基於幾個字節(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); 
相關問題