А в обработчике OnClick кнопки btRefresh напишем следующее:
Code: |
procedure TfmMain.btRefreshClick(Sender: TObject); var RootNode: TTreeNode; hFind: HBLUETOOTH_RADIO_FIND; hDevFind: HBLUETOOTH_DEVICE_FIND; FindParams: BLUETOOTH_FIND_RADIO_PARAMS; SearchParams: BLUETOOTH_DEVICE_SEARCH_PARAMS; SearchParamsSize: dword; DevInfo: ^PBLUETOOTH_DEVICE_INFO; DevInfoSize: dword; hRadio: THandle; RadioInfo: PBLUETOOTH_RADIO_INFO; RadioInfoSize: dword; RadioNode: TTreeNode; Loop: integer; DevNode: TTreeNode; begin with TreeView.Items do begin BeginUpdate;
// Очищаем дерево for Loop := 0 to Count - 1 do begin if TreeView.Items[Loop].ImageIndex > 0 then CloseHandle(TreeView.Items[Loop].ImageIndex); if Assigned(TreeView.Items[Loop].Data) then Dispose(TreeView.Items[Loop].Data); end; Clear;
// Корневая ветвь в дереве RootNode := Add(nil, 'Bluetooth Radios'); with RootNode do begin Data := nil; ImageIndex := -1; end;
// Начинаем поиск локальных модулей Bluetooth FindParams.dwSize := SizeOf(BLUETOOTH_FIND_RADIO_PARAMS); hFind := BluetoothFindFirstRadio(@FindParams, hRadio); if hFind <> 0 then begin repeat // Получить информацию о радиомодуле New(RadioInfo); RadioInfoSize := SizeOf(BLUETOOTH_RADIO_INFO); FillChar(RadioInfo^, RadioInfoSize, 0); RadioInfo^.dwSize := RadioInfoSize; // Ошибки не обрабатываем!!! BluetoothGetRadioInfo(hRadio, RadioInfo^);
// Добавляем радио в дерево RadioNode := AddChild(RootNode, string(RadioInfo^.szName) + ' [' + BTAdrToStr(RadioInfo^.address) + ']'); with RadioNode do begin // Так как мы сохраняем Handle, то не закрываем его! ImageIndex := hRadio; Data := RadioInfo; end;
// Начинаем поиск устройств для найденного радиомодуля. SearchParamsSize := SizeOf(BLUETOOTH_DEVICE_SEARCH_PARAMS); FillChar(SearchParams, SearchParamsSize, 0); SearchParams.dwSize := SearchParamsSize; SearchParams.fReturnRemembered := True; SearchParams.hRadio := hRadio;
New(DevInfo); DevInfoSize := SizeOf(BLUETOOTH_DEVICE_INFO); FillChar(DevInfo^, DevInfoSize, 0); DevInfo^.dwSize := DevInfoSize;
// Ищем первое hDevFind := BluetoothFindFirstDevice(SearchParams, DevInfo^); if hDevFind <> 0 then begin repeat // Добавляем в дерево DevNode := AddChild(RadioNode, string(DevInfo^.szName) + ' [' + BTAdrToStr(DevInfo^.Address) + ']'); with DevNode do begin Data := DevInfo; ImageIndex := -2; end;
// Ищем следующее устройство New(DevInfo); DevInfoSize := SizeOf(BLUETOOTH_DEVICE_INFO); FillChar(DevInfo^, DevInfoSize, 0); DevInfo^.dwSize := DevInfoSize; until not BluetoothFindNextDevice(hDevFind, DevInfo^);
// Поиск устройств закончен BluetoothFindDeviceClose(hDevFind); end;
// Находим следующее радио until not BluetoothFindNextRadio(hFind, hRadio);
// Поиск радиомодулей закончен BluetoothFindRadioClose(hFind); end;
EndUpdate; end;
with TreeView do begin Selected := RootNode; Items[0].Expand(True); end; end; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!