(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 Reports 2013 WIN INTL NUL
Microsoft 365 Business Standard (corporate)
Quest Software. TOAD Professional Edition
SAP Crystal Reports 2008 INTL WIN NUL License
IBM RATIONAL Clearcase Floating User License + Sw Subscription & Support 12 Months
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
eManual - электронные книги и техническая документация
Утиль - лучший бесплатный софт для Windows
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100