Работа с Bluetooth в Delphi
Часть 1
© 2006 Петриченко Михаил,
Soft Service Company
Вступление
Этой статьей хочу начать серию по работе с Bluetooth в Delphi под Microsoft Windows XP. Так как тема весьма сложная, прошу внимательно читать. Повторяться не буду.
Все программы написаны на Delphi 6 и тестировались со стандартным стеком Bluetooth от Microsoft под Windows XP + SP2.
Все необходимые библиотеки прилагаются. Так что дополнительно ничего качать не нужно. При разработке использовал только API функции с JEDI.
Описание функций будут даны в стиле Object Pascal. Сионистов просьба обращаться к MSDN и Microsoft Platform SDK.
Получение списка установленных радиомодулей 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;Это, конечно, все здорово, но в принципе бесполезно. Давайте что-нибудь сделаем еще. Например, получим информацию о радиомодуле Bluetooth.
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 используется функция
BluetoothGetRadioInfo - возвращает информацию о радиомодуле, который представлен описателем.
Объявление функции:
function BluetoothGetRadioInfo(Параметры:
hRadio : THandle;
var pRadioInfo : BLUETOOTH_RADIO_INFO): DWORD; stdcall;
Возвращаемые значения:
hRadio Описатель локального радиомодуля, который получен функцией BluetoothFindRadioFirst или BluetoothFindRadioNext pRadioInfo Структура, в которую записывается информация об указанном радиомодуле. Член dwSize должен быть равен размеру структуры
- Вернет ERROR_SUCCESS если информация получена, в противном случае код ошибки.
_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;
Заключение
Вот пока и все. В следующей статье рассмотрим, как получить список присоединенных устройств и опросить сервисы, которые они представляют.
Готовый рабочий пример использования указанных функций вы можете найти здесь.
Внимание! Запрещается перепечатка данной статьи или ее части без согласования с автором. Если вы хотите разместить эту статью на своем сайте или издать в печатном виде, свяжитесь с автором.
Copyright© 2006 Петриченко Михаил, Soft Service Company
Специально для Delphi Plus
Пожалуйста, оцените статью
| 2011 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2010 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2002 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2001 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2000 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 1999 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
- Услуги аутсорсинга в области программирования
- Как продлить срок службы картриджей
- Мошенничество во Всемирной Паутине. Осторожно: фишинг!
- Web-студия
- Как легально поднять уровень индекса цитирования.
- Мы реально сможем помочь вам в управлении предприятием
- Создание сайтов – популяризация вашего замысла
- Свой сайт. Управление ресурсом
- Семантическое ядро сайта или правила подбора ключевых фраз
- Инфо-Предприятие: выгоды явные и не явные
- Программирование в среде Delphi 8 for .NET
- Практикум по Delphi для решения прикладных задач
- Фундаментальные алгоритмы и структуры данных в Delphi
- Delphi 6. Программирование на Object Pascal
- Delphi и технология COM
- Delphi в шутку и всерьез: что умеют хакеры
- Программирование в Delphi глазами хакера
- Delphi 2005. Секреты программирования
- Искусство создания компонентов Delphi
- Приемы программирования в Delphi на основе VCL
- Программирование баз данных в Delphi 7
- Программирование баз данных в Delphi
- Программирование в среде Delphi
- Программирование в Delphi 7
- Язык SQL в Delphi 5