Я хотел бы иметь выше.
Я нашел IP Helper API, и он работает. Единственная проблема заключается в том, что в системах старше Vista я не могу определить, является ли адаптер беспроводным или обычным Ethernet.
Мне также нужно поддерживать WinXP и Server 2003.
Вот соответствующая цитата из документации (IP Helper):
Интерфейс беспроводной сети IEEE 802.11.
Примечание. Этот тип адаптера возвращается в Windows Vista и более поздних версиях. В Windows Server 2003 и> Windows XP интерфейс беспроводной сети IEEE 802.11 возвращает тип адаптера> MIB_IF_TYPE_ETHERNET.
Итак, что является хорошим способом идентифицировать беспроводные адаптеры и получить их MAC-адреса на WinXP / Server2003 и позже?
GetAdapterAddresses является частью интерфейса Windows API и должен предоставлять вам как информацию о MAC-адресах, так и тип NIC.
Вызов возвращает структуру, указывающую на связанный список адаптеров.
Убедитесь, что вы не жестко задаете размер структуры для обеспечения переносимости между версиями Windows, потому что IP_ADAPTER_ADDRESSES
структура изменилась размер между версиями.
Редактировать:
Это, очевидно, дает вам только MAC-адрес, так как он сообщает только правильный тип после Vista
Но,
GetIfTable возвращает MIB_IFTABLE
структура, из этого вы можете прочитать MIB_IFROW
который имеет dwType, который может иметь тип IF_TYPE_IEEE80211 или нет. Это не имеет никаких замечаний, что это особенно для Vista и должно быть действительно для XP, если MS не испортила их документацию.
У обоих из них должен быть физический адрес, поэтому вы должны быть в состоянии сопоставить эти две записи, чтобы идентифицировать одну карту.
Если вы собираетесь поддерживать XP с нуля, это было до того, как API-интерфейс Native Wifi был представлен в XP (SP 2). & 3 поддержка Native Wifi API).
Я думаю, что все еще может быть возможность через WMI. Вы могли бы создать Win32_NetworkAdapter
(Устаревший класс WMI) В этом классе вы должны быть в состоянии извлечь AdapterTypeID
который говорит, если это беспроводное устройство или нет, и MACAddress
который дает вам MAC-адрес.
Поэтому я думаю, что вы выбрали либо поддержку Windows XP SP 2 и выше, либо интеграцию с WMI и устаревшим классом. Похоже, в любом случае есть верблюды, которых можно проглотить.