Главная » Работа с Bluetooth в среде Borland C++
Данный текст, рекомендуется читать в случае если у вас возникли проблемы при работе с bluetooth в среде Borland C++. Принцип работы с bluetooth и в Delphi ,и в Builder'е одинаков. Но ,для того чтобы  заработало это в Builder'е, пришлось пойти на некоторые уловки.Итак, первое что вам понадобится – архив, содержащий заголовочные файлы и lib’ы. Заголовочные файлы для удобства складываются в папку include, lib'ы ,соответственно , тоже

    //пока не забыл, киньте на форму три компонента 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 частах патча.Спасибо:Михаилу Петриченко за его помощь. Категория: Языки программирования | Просмотров: 184