Важно: В исходном виде в файле 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; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!