Голосование

Какую ОС Вы используете?

Windows 98/ME
Windows NT
Windows 2000
Windows XP
Windows 2003
Windows Vista
Windows 7
Windows 8
Windows 10
Linux
Другая ОС



Посмотреть результаты
Другие опросы ...

 

Лента RSS, новости сайта Новости сайта
Лента RSS, новости форума Новости форума
  Bookmark and Share

Архив исходников

   
  Базы данных
  Графика & Мультимедиа
  Сети & Интернет
  Система
  Разное
   

Кнопки, Ссылки и Баннеры ...

 


Automatic translation


English German French Italian Spanish
Portuguese Greece Japan Chinese Korean


Ссылки и Баннеры


скрыть

 

Delphi Sources

Delphi Sources

СТАТЬИ

 

. : Работа с Bluetooth в Delphi - Часть 1 : .

 

Страницы | 1 | 2 | 3 | 4 |


Вступление


Этой статьей хочу начать серию по работе с 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;
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;


Заключение

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

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

Страницы | 1 | 2 | 3 | 4 |
 

Дата: 26.07.2007, Автор: Петриченко Михаил.
Оригинал статьи: http://mobileservicesoft.narod.ru/stat.html






Назад

   

 























































































































 

© 2004-2017 "DS"

Отправить письмо / Реклама


ВКонтакте   Facebook   Twitter