|
Навигация
|
Главная » Delphi Delphi и Bluetooth. Часть 1 (исходники)Источник: mobileservicesoft Петриченко Михал ВступлениеЭтой статьей начинаем серию статей по работе с Bluetooth в Delphi под Microsoft Windows XP. Так как тема весьма сложная, прошу внимательно читать. Повторяться не буду. Все программы написаны на Delphi 6 и тестировались со стандартным стеком Bluetooth от Microsoft под Windows XP + SP2. Все необходимые библиотеки прилагаются. Так что дополнительно ничего качать не нужно. При разработке использовал только API функции с JEDI. Описание функций будут даны в стиле Object Pascal.Получение списка установленных радиомодулей Bluetooth Итак, для начала попробуем получить список установленных на компьютере радиомодулей Bluetooth. BluetoothFindFirstRadio - начинает перечисление локальных радиомодулей Bluetooth. Объявление функции: function BluetoothFindFirstRadio( const pbtfrp : PBlueToothFindRadioParams; var phRadio : THandle): HBLUETOOTH_RADIO_FIND; stdcall; Параметры: pbtfrp - указатель на структуру BLUETOOTH_FIND_RADIO_PARAMS. Член dwSize этой структуры должен содержать размер структуры (устанавливается посредством SizeOf(BLUETOOTH_FIND_RADIO_PARAMS)). phRadio - описатель (Handle) найденного устройства. Возвращаемые значения: в случае успешного выполнения функция вернет корректный описатель в phRadio и корректный описатель в качестве результата. В случае ошибки будет возвращен 0. Для получения кода ошибки используйте функцию GetLastError. BluetoothFindNextRadio - находит следующий установленный радиомодуль Bluetooth. Объявление функции: function BluetoothFindNextRadio( hFind : HBLUETOOTH_RADIO_FIND; var phRadio : THandle): BOOL; stdcall; Параметры: hFind - описатель, который вернула функция BluetoothFindFirstRadio. phRadio - сюда будет помещен описатель следующего найденного радиомодуля. Возвращаемые значения: вернет TRUE, если устройство найдено. В phRadio корректный описатель на найденный радиомодуль. Вернет FALSE в случае отсутствия устройства. phRadio содержит некорректный описатель. Используйте GetLastError для получения кода ошибки. BluetoothFindRadioClose - закрывает описатель перечисления радиомодулей Bluetooth. Объявление функции: function BluetoothFindRadioClose( hFind : HBLUETOOTH_RADIO_FIND): BOOL; stdcall; Параметры: hFind - описатель, который вернула функция BluetoothFindFirstRadio. Возвращаемые значения: вернет TRUE если описатель успешно закрыт. Вернет FALSE в случае ошибки. Для получения кода ошибки используйте GetLastError. Теперь у нас достаточно знаний, чтобы получить список установленных радиомодулей Bluetooth. Напишем вот такую процедуру: procedure EnumRadio; var hRadio: THandle; BFRP: BLUETOOTH_FIND_RADIO_PARAMS; hFind: HBLUETOOTH_RADIO_FIND; begin // Инициализация структуры BLUETOOTH_FIND_RADIO_PARAMS BFRP.dwSize := SizeOf(BFRP); // Начинаем поиск hFind := BluetoothFindFirstRadio(@BFRP, hRadio); if (hFind <> 0) then begin repeat // Что-то сделать с полученным описателем // Закрыть описатель устройства CloseHandle(hRadio); // Находим следующее устройство until (not BluetoothFindNextRadio(hFind, hRadio)); // Закрываем поиск BluetoothFindRadioClose(hFind); end; end; Это, конечно, все здорово, но в принципе бесполезно. Давайте что-нибудь сделаем еще. Например, получим информацию о радиомодуле Bluetooth. Получение информации о радиомодуле Bluetooth Для получения информации о радиомодуле Bluetooth используется функция: BluetoothGetRadioInfo - возвращает информацию о радиомодуле, который представлен описателем. Объявление функции: function BluetoothGetRadioInfo( hRadio : THandle; var pRadioInfo : BLUETOOTH_RADIO_INFO): DWORD; stdcall; Параметры: hRadio - описатель локального радиомодуля, который получен функцией BluetoothFindRadioFirst или BluetoothFindRadioNext. pRadioInfo - структура, в которую записывается информация об указанном радиомодуле. Член dwSize должен быть равен размеру структуры. Возвращаемые значения: вернет ERROR_SUCCESS если информация получена, в противном случае код ошибки. Структура BLUETOOTH_RADIO_INFO выглядит вот так: _BLUETOOTH_RADIO_INFO = record dwSize : dword; address : BLUETOOTH_ADDRESS; szName : array [0..BLUETOOTH_MAX_NAME_SIZE - 1] of widechar; ulClassofDevice : ulong; lmpSubversion : word; manufacturer : word; end; dwSize - размер структуры в байтах. address - адрес локального радиомодуля. szName - имя радиомодуля. ulClassofDevice - класс устройства. lmpSubversion - устанавливается производителем. manufacturer - код производителя (константы BTH_MFG_Xxx). Для получения новых кодов обратитесь к сайту спецификаций Bluetooth. Это уже что-то. Воспользуемся этой информацией и напишем вот такую процедуру. procedure GetRadioInfo(hRadio: THandle); var RadioInfo: BLUETOOTH_RADIO_INFO; begin // Инициализация структуры BLUETOOTH_RADIO_INFO FillChar(RadioInfo, 0, SizeOf(RadioInfo)); RadioInfo.dwSize := SizeOf(RadioInfo); // Получаем информацию if (BluetoothGetRadioInfo(hRadio, RadioInfo) = ERROR_SUCCESS) then begin // Используем полученную информацию end; end; Заключение Вот пока и все. В следующей статье рассмотрим, как получить список присоединенных устройств и опросить сервисы, которые они представляют. RadPHP XE2. Работа с файлами в Delphi. Коммерческий эффект от использования СУБД SQLBase компании Gupta. Воспроизведение звуков на Delphi. Новая версия FastScript 1.98. Главная » Delphi |
© 2024 Team.Furia.Ru.
Частичное копирование материалов разрешено. |