Cześć, mam taki problem.
Mam adapter bluetooth 4.0 wpięty pod USB. Do tego mam dwa dalmierze pracujące w tym standardzie - dalmierze jednego producenta.
Potrafię się z nimi połączyć, odczytać z nich dane, ale jedyne, do czego nie mogę dojść, to jak odczytać ich nazwę. Z bardzo ubogiej pseudo-dokumentacji wynika, że urządzenia nie wysyłają takich danych jak nazwa i model, więc pewnie można je wyczytać z Windowsa, który zresztą sam to robi, pokazując odpowiednie nazwy na liście urządzeń. I tu zaczynają się problemy. Z tego, co udało mi się wyczytać, to funkcja

SetupDiGetDeviceRegistryProperty

może mi zwrócić friendly name urządzenia. Problem polega na tym, że jako parametr musi dostać strukturę SP_DEVINFO_DATA

, którą z kolei pobiera się funkcją <code class="cpp">SetupDiEnumDeviceInfo

. I do tej pory wszystko wydaje się jasne i proste. Problem polega na tym, że w taki sposób jestem w stanie pobrać nazwy WSZYSTKICH urządzeń danego producenta (należących do odpowiedniej klasy). A ja bym chciał pobrać nazwę urządzenia, do którego się połączyłem. Z urządzeniem łączę się w następujący sposób:

Funkcja:

SetupDiGetClassDevs(&m_serviceGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);

zwraca mi HDEVINFO - podstawowy parametr do dalszej pracy.

Następnie pobieram sobie interfejsy dla tych urządzeń:

SetupDiEnumDeviceInterfaces(m_hDevInfo, NULL, &m_serviceGuid, index++, &data);

gdzie index to DWORD od 0, a data to struktura SP_DEVICE_INTERFACE_DATA

Gdy już mam interfejs, mogę sobie pobrać jego szczegóły:

SetupDiGetDeviceInterfaceDetail(m_hDevInfo, &data, pIfaceDetailData, reqBufferSize, NULL, NULL);

pIfaceDetailData to PSP_DEVICE_INTERFACE_DETAIL_DATA
Dzięki temu mogę odczytać device path, ponieważ ta struktura ma takie pole.
Ten devicePath następnie używam w CreateFile i w taki sposób z grubsza otrzymuję połączenie z urządzeniem.

I teraz pytanie, w jaki sposób pobrać friendly name urządzenia, z którym się połączyłem?