(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

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; 

Заключение

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



 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 28.02.2007 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
SAP® Crystal Dashboard Design Departmental 2016 WIN INTL NUL
IBM RATIONAL Rose Enterprise Floating User License + Sw Subscription & Support 12 Months
Oracle Database Personal Edition Named User Plus Software Update License & Support
Allround Automation PL/SQL Developer - Unlimited license
Microsoft Office для дома и учебы 2019 (лицензия ESD)
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Компьютерный дизайн - Все графические редакторы
СУБД Oracle "с нуля"
Adobe Photoshop: алхимия дизайна
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100