2012-08-14 110 views
2

如何在Windows中查找藍牙網絡接口的MAC地址(硬件地址)?問題不在於找出地址,問題是要確定網絡接口類型是否爲藍牙。C中的藍牙MAC地址

這兩種方法我試過了以太網卡和藍牙(至少我看不出差別)之間沒有區別 - GetAdaptersAddresses回報藍牙接口IF_TYPE_ETHERNET_CSMACDWMI作爲Ethernet 802.3AdapterTypeID(與無線沉綿無線型存在) 。

唯一的可能性我目前看到的是搜索的名稱或描述字符串文本「藍牙」但這似乎是確定的解決方案;-)

+0

你要當一個藍牙適配器插入機器檢測? – 2012-08-14 07:33:03

+0

你嘗試過'WSAQUERYSET'和'NS_BTH'嗎? – 2012-08-14 07:41:20

+0

問題是我需要經典eth接口的HW地址,我需要從列表中刪除所有其他接口。我可以通過WMI(Win32_NetworkAdapter和PhysicalAdapter)找出哪些接口是虛擬的(隧道等)。我也可以通過GetAdaptersAddresses找到什麼是WiFi接口(因爲WMI因爲某些原因返回了以太網類型)。目前在我的列表中只有普通的以太網接口和藍牙,我需要檢測到「藍牙是藍牙」,而不是其他經典卡。 WSAQUERYSET聽起來不錯,我需要檢查它是如何工作的,謝謝。 – Martin 2012-08-14 07:52:46

回答

0

沒有可以使用BluetoothFindFirstRadioBluetoothFindNextRadioBluetoothGetRadioInfo。適配器的本地MAC地址是然後在該字段的BLUETOOTH_RADIO_INFOaddress

BLUETOOTH_FIND_RADIO_PARAMS btfrp; 
btfrp.dwSize = sizeof(btfrp); 
HANDLE hRadio; 
HBLUETOOTH_RADIO_FIND hFind = BluetoothFindFirstRadio(&btfrp, &hRadio); 

if(hFind == NULL) 
{ 
    DWORD err = GetLastError(); 
    switch(err) 
    { 
    case ERROR_NO_MORE_ITEMS: 
     // No bluetooth radio found 
     break; 
    default: 
     // Error finding radios 
    } 

    return; 
} 
do 
{ 
    BLUETOOTH_RADIO_INFO radioInfo; 
    radioInfo.dwSize = sizeof(radioInfo); 
    DWORD err = BluetoothGetRadioInfo(hRadio, &radioInfo); 
    if(err != ERROR_SUCCESS) 
    { 
     // Error during BluetoothGetRadioInfo 
     continue; 
    } 
    // The mac address is in radioInfo.address 

} 
while(BluetoothFindNextRadio(hFind, &hRadio)); 


BluetoothFindRadioClose(hFind); 
相關問題