Содержание материала

Важно: В исходном виде в файле JwaBluetoothAPIs функция BluetoothDisplayDeviceProperties объявлена не верно. Второй параметр должен быть указателем, а там он передается как структура. Я исправил функцию так, чтобы он передавался как var-параметр (по ссылке). Используйте модуль JwaBluetoothAPIs из этого примера, чтобы не возникало ошибок доступа к памяти.

Важно: Ни в этой процедуре, ни ранее, ни далее я не провожу проверку ошибок, чтобы не загромождать код лишними подробностями. В реальном приложении НЕОБХОДИМО проверять возвращаемые функциями значения и указатели.

И так, в этом коде есть новая функция, выделенная жирным шрифтом.

BluetoothDisplayDeviceProperty - функция выводит стандартное окно свойств устройства Bluetooth.

Объявление функции:

function BluetoothEnableDiscovery(
hwndParent : HWND;
var pbtdi : PBLUETOOTH_DEVICE_INFO): BOOL; stdcall;

Важно: В оригинале (см. примечание выше) функция выглядит вот так:

function BluetoothEnableDiscovery(
hwndParent : HWND;
pbtdi : PBLUETOOTH_DEVICE_INFO): BOOL; stdcall;

Это не верно, так как в документации Microsoft указано, что параметр pbtdi должен передаваться как указатель (что подразумевает запись PBLUETOOTH_DEVICE_INFO), но как я писал выше, этот тип ошибочен. Он не является указателем. Я изменил функцию так, как показано выше (так она и должна быть, если не менять определение типа). Параметры:

hwndParent

Handle родительского окна, которому будет принадлежать диалог свойств. Может быть 0, тогда родительским выбирается окно Desktop.

pbtdi

Указатель на структуру BLUETOOTH_DEVICE_INFO в которой содержится адрес требуемого устройства.

 
Возвращаемые значения:

· TRUE - если вызов успешен
· FALSE - в противном случае (код ошибки можно узнать вызовом функции GetLastError).

Выбор устройства

Рассмотрим, как вызвать окно диалога выбора устройства.

Добавим в наш проект на Panel еще одну кнопку TButton и установите ее свойства как в таблице:

Свойство

Значение

Caption

Select

Name

btSelect

Напишем вот такой обработчик события OnClick у этой кнопки:

Code:

procedure TfmMain.btSelectClick(Sender: TObject);

var

ASelParams: BLUETOOTH_SELECT_DEVICE_PARAMS;

ASelParamsSize: dword;

begin

ASelParamsSize := SizeOf(BLUETOOTH_SELECT_DEVICE_PARAMS);

FillChar(ASelParams, ASelParamsSize, 0);

with ASelParams do

begin

dwSize := ASelParamsSize;

hwndParent := Handle;

fShowRemembered := True;

fAddNewDeviceWizard := True;

end;

 

BluetoothSelectDevices(@ASelParams);

BluetoothSelectDevicesFree(@ASelParams);

end

 

В этой части кода две новые функции.

BluetoothSelectDevices - функция разрешает/запрещает обнаружение локального радиомодуля Bluetooth.

Объявление функции:

function BluetoothSelectDevices(
pbtsdp : PBLUETOOTH_SELECT_DEVICE_PARAMS): BOOL; stdcall;

Параметры:

pbtsdp

Описание смотрите ниже в описании структуры.

Возвращаемые значения:

Если функция вернула TRUE, то пользователь выбрал устройства. Pbtsdp^.pDevices будет указывать на корректные данные. После вызова необходимо проверить флаги fAuthenticated и fRemembered, что бы удостовериться в корректности данных. Для освобождения памяти используйте функцию BluetoothSelectDevicesFree, только если функция вернет TRUE.

Вернет FALSE если вызов прошел не удачно. Используйте GetLastError для получения дополнительных сведений. Возможные ошибки:

ERROR_CANCELLED

Пользователь отменил выбор устройства.

ERROR_INVALID_PARAMETER

Параметр pbsdp равен nil.

ERROR_REVISION_MISMATCH

Структура, переданная в pbsdp неизвестного или неверного размера.

Другие ошибки Win32

 

BLUETOOTH_SELECT_DEVICE_PARAMS

Объявление:

Code:

BLUETOOTH_SELECT_DEVICE_PARAMS = record

dwSize : DWORD;

cNumOfClasses : ULONG;

prgClassOfDevices : PBlueToothCodPairs;

pszInfo : LPWSTR;

hwndParent : HWND;

fForceAuthentication : BOOL;

fShowAuthenticated : BOOL;

fShowRemembered : BOOL;

fShowUnknown : BOOL;

fAddNewDeviceWizard : BOOL;

fSkipServicesPage : BOOL;

pfnDeviceCallback : PFN_DEVICE_CALLBACK;

pvParam : Pointer;

cNumDevices : DWORD;

pDevices : __PBLUETOOTH_DEVICE_INFO;

end;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить