Работа с Bluetooth в Delphi. Часть 2.


Вступление

В первой части статьи мы научились получать список локальных радиомодулей Bluetooth и узнавать их свойства.

Теперь пришло время получить список устройств Bluetooth, которые подключены к нашим локальным радиомодулям.Получение списка устройств Bluetooth

Для получения списка устройств Bluetooth нам понадобятся следующие функции (они очень похожи на функции, используемые для получения списка локальных радиомодулей).

BluetoothFindFirstDevice

Начинает перечисление устройств Bluetooth.

Объявление функции:

functionBluetoothFindFirstDevice(
constpbtsp : BLUETOOTH_DEVICE_SEARCH_PARAMS;
varpbtdi : BLUETOOTH_DEVICE_INFO): HBLUETOOTH_DEVICE_FIND; stdcall;

Параметры:

  • Pbtsp - указатель на структуру BLUETOOTH_DEVICE_SEARCH_PARAMS. Член dwSize этой структуры должен содержать размер структуры (устанавливается посредством SizeOf (BLUETOOTH_DEVICE_SEARCH_PARAMS)).
    Член hRadio должен содержать описатель локального радиомодуля, полученный вызовом функции BluetoothFindFirstRadio.
  • Pbtdi - структура BLUETOOTH_DEVICE_INFO, в которую будет возвращена информации об устройстве Bluetooth.

Возвращаемые значения:

  • В случае успешного выполнения функция вернет корректный описатель в качестве результата.
  • В случае ошибки будет возвращен 0. Для получения кода ошибки используйте функцию GetLastError.

BluetoothFindNextDevice

Находит следующее устройство Bluetooth.

Объявление функции:

functionBluetoothFindNextDevice(
 hFind : HBLUETOOTH_DEVICE_FIND;
varpbtdi : BLUETOOTH_DEVICE_INFO): BOOL; stdcall;

Параметры:

  • hFind - Описатель, который вернула функция BluetoothFindFirstDevice.
  • pbtdi - Структура BLUETOOTH_DEVICE_INFO, в которую будет помещена информацию об устройстве.

Возвращаемые значения:

  • Вернет TRUE, если устройство найдено.
  • Вернет FALSE в случае отсутствия устройства. Используйте GetLastError для получения кода ошибки.

BluetoothFindDeviceClose

Закрывает описатель перечисления устройств Bluetooth.

Объявление функции:

functionBluetoothFindDeviceClose(
 hFind : HBLUETOOTH_DEVICE_FIND): BOOL; stdcall;

Параметры:

  • hFind - Описатель, который вернула функция BluetoothFindFirstDevice.

Возвращаемые значения:

  • Вернет TRUE, если описатель успешно закрыт.
  • Вернет FALSE в случае ошибки. Для получения кода ошибки используйте GetLastError.

BluetoothGetDeviceInfo

Возвращает информацию об указанном устройстве Bluetooth.

Объявление функции:

functionBluetoothGetDeviceInfo(
 hRadio : THandle;
varpbtdi : BLUETOOTH_DEVICE_INFO): DWORD; stdcall;

Параметры:

  • hRadio - Описатель локального радиомодуля Bluetooth.
  • pbtdi - Структура BLUETOOTH_DEVICE_INFO, в которую возвращается информация об устройстве. dwSize должен быть равен размеру структуры. addreess должен содержать адрес устройства, о котором хотим получить информацию.

Возвращаемые значения:

  • Вернет ERROR_SUCCESS, если выполнено успешно и информация занесена в структуру pbtdi. Остальные значения - код ошибки.

Обладая этими знаниями, можно написать процедуру получения информации об устройствах Bluetooth. procedure GetDevices(_hRadio: THandle); var DeviceInfo: PBLUETOOTH_DEVICE_INFO; DeviceSearchParams: BLUETOOTH_DEVICE_SEARCH_PARAMS; DeviceFind: HBLUETOOTH_DEVICE_FIND; begin // Инициализация структуры BLUETOOTH_DEVICE_SEARCH_PARAMS with DeviceSearchParams do begin dwSize := SizeOf(BLUETOOTH_DEVICE_SEARCH_PARAMS); fReturnRemembered := true; // Вернуть запомненные hRadio := _hRadio; end; // Инициализация структуры BLUETOOTH_DEVICE_INFO FillChar(DeviceInfo, SizeOf(PBLUETOOTH_DEVICE_INFO), 0); DeviceInfo.dwSize := SizeOf(PBLUETOOTH_DEVICE_INFO); // Начинаем поиск DeviceFind := BluetoothFindFirstDevice(DeviceSearchParams, DeviceInfo); if (DeviceFind <> 0) then begin repeat // Что-то сделать с полученными данными // Инициализация структуры BLUETOOTH_DEVICE_INFO FillChar(DeviceInfo, SizeOf(BLUETOOTH_DEVICE_INFO), 0); DeviceInfo.dwSize := SizeOf(PBLUETOOTH_DEVICE_INFO); // Находим следующее устройство until (not BluetoothFindNextDevice(DeviceFind, DeviceInfo)); // Закрываем поиск BluetoothFindDeviceClose(DeviceFind); end; end; Заключение

Пока все. В следующей части рассмотрим способы получения информации о сервисах, предоставляемых устройствами Bluetooth.

Готовый рабочий пример использования указанных функций вы можете найти здесь.

20 июля 2006 Г.

Bluetooth Delphi

Bluetooth Delphi. 2.

Bluetooth .

Bluetooth, .

Bluetooth

Bluetooth ( , ).

BluetoothFindFirstDevice

Bluetooth.

:

function BluetoothFindFirstDevice(
const pbtsp : BLUETOOTH_DEVICE_SEARCH_PARAMS;
var pbtdi : BLUETOOTH_DEVICE_INFO): HBLUETOOTH_DEVICE_FIND; stdcall;

:

  • Pbtsp - BLUETOOTH_DEVICE_SEARCH_PARAMS. dwSize ( SizeOf (BLUETOOTH_DEVICE_SEARCH_PARAMS)).
    hRadio , BluetoothFindFirstRadio.
  • Pbtdi - BLUETOOTH_DEVICE_INFO, Bluetooth.

:

  • .
  • 0. GetLastError.

BluetoothFindNextDevice

Bluetooth.

:

function BluetoothFindNextDevice(
  hFind : HBLUETOOTH_DEVICE_FIND;
var pbtdi : BLUETOOTH_DEVICE_INFO): BOOL; stdcall;

:

  • hFind - , BluetoothFindFirstDevice.
  • pbtdi - BLUETOOTH_DEVICE_INFO, .

:

  • TRUE, .
  • FALSE . GetLastError .

BluetoothFindDeviceClose

Bluetooth.

:

function BluetoothFindDeviceClose(
  hFind : HBLUETOOTH_DEVICE_FIND): BOOL; stdcall;

:

  • hFind - , BluetoothFindFirstDevice.

:

  • TRUE, .
  • FALSE . GetLastError.

BluetoothGetDeviceInfo

Bluetooth.

:

function BluetoothGetDeviceInfo(
  hRadio : THandle;
var pbtdi : BLUETOOTH_DEVICE_INFO): DWORD; stdcall;

:

  • hRadio - Bluetooth.
  • pbtdi - BLUETOOTH_DEVICE_INFO, . dwSize . addreess , .

:

  • ERROR_SUCCESS, pbtdi. - .

, Bluetooth.

procedure GetDevices(_hRadio: THandle);
var
  DeviceInfo: PBLUETOOTH_DEVICE_INFO;
  DeviceSearchParams: BLUETOOTH_DEVICE_SEARCH_PARAMS;
  DeviceFind: HBLUETOOTH_DEVICE_FIND;
begin
  //   BLUETOOTH_DEVICE_SEARCH_PARAMS
  with DeviceSearchParams do begin
    dwSize := SizeOf(BLUETOOTH_DEVICE_SEARCH_PARAMS);
    fReturnRemembered := true; //  
    hRadio := _hRadio;
  end;

  //   BLUETOOTH_DEVICE_INFO
  FillChar(DeviceInfo, SizeOf(PBLUETOOTH_DEVICE_INFO), 0);
  DeviceInfo.dwSize := SizeOf(PBLUETOOTH_DEVICE_INFO);

  //  
  DeviceFind := BluetoothFindFirstDevice(DeviceSearchParams, DeviceInfo);
  if (DeviceFind <> 0) then begin
    repeat
      // -    

      //   BLUETOOTH_DEVICE_INFO
      FillChar(DeviceInfo, SizeOf(BLUETOOTH_DEVICE_INFO), 0);
      DeviceInfo.dwSize := SizeOf(PBLUETOOTH_DEVICE_INFO);
      //   
    until (not BluetoothFindNextDevice(DeviceFind, DeviceInfo));

    //  
    BluetoothFindDeviceClose(DeviceFind);
  end;
end;

. , Bluetooth.

.