//пока не забыл, киньте на форму три компонента 2-TreeView(здесь будут отображаться ваши устройства : радио и девайсы), и один ListBoxпослужит отражение
проводимых действий.
BLUETOOTH_FIND_RADIO_PARAMS btfrp; HBLUETOOTH_RADIO_FIND
hFind; BLUETOOTH_RADIO_INFO
RadioInfo =
{0}; btfrp.dwSize= sizeof(btfrp);
hFind=
BluetoothFindFirstRadio(&btfrp,&hRadio);
if(NULL!= hFind) { BLUETOOTH_RADIO_INFOradioInfo; radioInfo.dwSize = sizeof(radioInfo);
TTreeNode*
tree;Form1->ListBox1->Items->Add("Radioisfound,began
questioning");if(ERROR_SUCCESS=
=
BluetoothGetRadioInfo(hRadio, &radioInfo))
{AnsiString
name[256];name[256]=radioInfo.szName;Form1->TreeView1->Items->BeginUpdate();
Form1->ListBox1->Items->Add("Radiorequesting.......");Application->ProcessMessages();
AnsiStringabc;abc=
String(radioInfo.szName); Form1->TreeView1->Items->Add(tree,abc); Form1->TreeView1->Items->EndUpdate(); Form1->ListBox1->Items->Add("Radio requesting is
finished.");
return
hRadio;//возвращаем
хенделбрилкаоннам еще пригодиться. } else { Form1->ListBox1->Items->Add("Radio request
isfaliled,readhealabout
this
topic!");
Form1->ListBox1->Items->Add(GetLastError());
}
} else {TTreeNode*tres;Form1->ListBox1->Items->Add("Not nor one local device of the issue Bluetooth is installed!");
CloseHandle(hRadio);
}
}
Вот и все теперь можно получить список удаленных устройств (брелоков).
Для поиска удаленных устройств у меня получилась вот такая простая функция.
void findremote(HANDLE hRadio,bool aunt,bool remeber,bool uncknow,bool connect)
{
BLUETOOTH_DEVICE_INFO_STRUCT deviceInfo; deviceInfo.dwSize = sizeof(deviceInfo); BLUETOOTH_DEVICE_SEARCH_PARAMS deviceSearchParams; memset(&deviceSearchParams, 0, sizeof(deviceSearchParams)); deviceSearchParams.dwSize = sizeof(deviceSearchParams); deviceSearchParams.fReturnAuthenticated = aunt;
deviceSearchParams.fReturnRemembered = remeber;
deviceSearchParams.fReturnUnknown = uncknow;
deviceSearchParams.fReturnConnected = connect; deviceSearchParams.hRadio = hRadio; HANDLE hDeviceFind = BluetoothFindFirstDevice(&deviceSearchParams, &deviceInfo); if (NULL !=
hDeviceFind) { do
{TTreeNode*node;Form1->TreeView2->Items->Add(node,String(deviceInfo.szName));
BluetoothGetDeviceInfo(hRadio, &deviceInfo);
GUID guidServices[10];
DWORD numServices = sizeof(guidServices);
DWORD result = BluetoothEnumerateInstalledServices(hRadio,
&deviceInfo,
&numServices, guidServices); }
while(BluetoothFindNextDevice(hDeviceFind,
deviceInfo));
BluetoothFindDeviceClose(hDeviceFind);}else{Form1->ListBox1->Items->Add("No any remote device in working area");
SOCKET s;
SOCKADDR_BTH sbth;
memset(&sbth, 0, sizeof(sbth));
sbth.addressFamily = AF_BTH;
sbth.btAddr = 0;
sbth.port =
BT_PORT_ANY; if (bind(s,
(const
sockaddr*)&sbth,sizeof(SOCKADDR_BTH))== SOCKET_ERROR) { Form1->ListBox1->Items->Add("All right
we
bind
now!!!");
}else{Form1->ListBox1->Items->Add("Bind is failded. ");}
}
}
Расскажу главное. Первые три переменные, которые объявлены в функции, могут использоваться в установке следующих параметров поиска:
deviceSearchParams.fReturnAuthenticated = aunt;
deviceSearchParams.fReturnRemembered = remeber;
deviceSearchParams.fReturnUnknown = uncknow;
deviceSearchParams.fReturnConnected = connect;aunt ,соответственно если true, то поиск возвращает только аудентифицированные устройства ,remeber –запомненные, uncknow– неопознанные, connect–подключенные.Для чего нужно создавать сокет и ставить его на прослушку, я расскажу в 3-4 частах патча.Спасибо:Михаилу Петриченко за его помощь.