WinXP / MFC: перечисление Bluetooth: сбросить список устройств? - PullRequest
0 голосов
/ 17 октября 2011

Я смотрю на группу устройств Bluetooth, с которыми мне нужно работать.У них есть известный банк MAC-адресов, поэтому я могу выбрать их из списка.У меня проблемы с получением системы, чтобы предоставить мне текущий список.

BLUETOOTH_RADIO_INFO radioInfo;
radioInfo.dwSize = sizeof(radioInfo);
HRESULT hr = ::BluetoothGetRadioInfo(hRadio, &radioInfo);

BLUETOOTH_DEVICE_SEARCH_PARAMS deviceSearchParams;
memset(&deviceSearchParams, 0, sizeof(deviceSearchParams));
deviceSearchParams.dwSize = sizeof(deviceSearchParams);
deviceSearchParams.fReturnAuthenticated = false;
deviceSearchParams.fReturnRemembered = false;
deviceSearchParams.fReturnUnknown = true;
deviceSearchParams.fReturnConnected = false;
deviceSearchParams.hRadio = hRadio;

HANDLE hDeviceFind = ::BluetoothFindFirstDevice(&deviceSearchParams, &deviceInfo); 

Я перебираю список устройств и выбираю распознанные единицы.

Кажется, мне нужно перезапустить апплет панели управления, чтобы обновить обнаруживаемые устройства, иначе я получаючто представляет собой «запомненный» список (а не фактический список устройств, которые являются локальными, непарными и включены).

Предложения?

Использование XP / VC2008 / MFC

1 Ответ

0 голосов
/ 17 октября 2011

FWIW: если вы хотите сбросить список, используйте этот код:

WORD wVersionRequested = 0x202;
WSADATA m_data;

if ( ::WSAStartup(wVersionRequested, &m_data) == S_OK )
{
   WSAQUERYSET querySet;

   memset(&querySet, 0, sizeof(querySet));

   querySet.dwSize = sizeof(querySet);

   querySet.dwNameSpace = NS_BTH;

   HANDLE hLookup;
   DWORD flags = LUP_RETURN_NAME | LUP_CONTAINERS | LUP_RETURN_ADDR | LUP_FLUSHCACHE |      LUP_RETURN_TYPE | LUP_RETURN_BLOB | LUP_RES_SERVICE;

   int nResult = WSALookupServiceBegin(&querySet, flags, &hLookup);
   WSALookupServiceEnd(hLookup);
   WSACleanup();

   if( nResult != S_OK ) return FALSE; 
   else return TRUE;
}

return FALSE;
...