Code: |
procedure TfmMain.TreeViewChange(Sender: TObject; Node: TTreeNode); var ASelected: TTreeNode;
procedure ShowRadios; var Info: PBLUETOOTH_RADIO_INFO; CurNode: TTreeNode; begin // Строим столбцы with ListView.Columns do begin BeginUpdate; with Add do Caption := 'Address'; with Add do Caption := 'Name'; with Add do Caption := 'Class Of Device'; with Add do Caption := 'Manufacturer'; with Add do Caption := 'Subversion'; with Add do Caption := 'Connectable'; with Add do Caption := 'Discoverable'; EndUpdate; end;
// Заполняем список with ListView.Items do begin BeginUpdate;
CurNode := ASelected.GetFirstChild;
while Assigned(CurNode) do begin Info := PBLUETOOTH_RADIO_INFO(CurNode.Data);
// Перечитать информацию о радиомодуле BluetoothGetRadioInfo(CurNode.ImageIndex, Info^);
with Add do begin Data := Pointer(CurNode.ImageIndex); Caption := BTAdrToStr(Info.address); with SubItems do begin Add(string(Info.szName)); Add(IntToStr(Info.ulClassofDevice)); Add(IntToStr(Info.manufacturer)); Add(IntToStr(Info.lmpSubversion)); // NEW FUNCTIONS!!! Add(BoolToStr(BluetoothIsConnectable(CurNode.ImageIndex), True)); Add(BoolToStr(BluetoothIsDiscoverable(CurNode.ImageIndex), True)); end; end;
CurNode := ASelected.GetNextChild(CurNode); end;
EndUpdate; end; end;
procedure ShowDevices; var Info: ^PBLUETOOTH_DEVICE_INFO; CurNode: TTreeNode; begin // Строим столбцы with ListView.Columns do begin BeginUpdate; with Add do Caption := 'Address'; with Add do Caption := 'Name'; with Add do Caption := 'Class Of Device'; with Add do Caption := 'Connected'; with Add do Caption := 'Remembered'; with Add do Caption := 'Authenticated'; with Add do Caption := 'Last Seen'; with Add do Caption := 'Last Used'; EndUpdate; end;
// Заполняем список with ListView.Items do begin BeginUpdate;
CurNode := ASelected.GetFirstChild;
while Assigned(CurNode) do begin Info := CurNode.Data;
// Перечитываем информацию об устройстве // Так как передаем указатель, то она автоматом // Обновится и в том месте, где мы ее сохраняли BluetoothGetDeviceInfo(ASelected.ImageIndex, Info^);
with Add do begin Data := Info; Caption := BTAdrToStr(Info^.Address); with SubItems do begin Add(string(Info^.szName)); Add(IntToStr(Info^.ulClassofDevice)); Add(BoolToStr(Info^.fConnected, True)); Add(BoolToStr(Info^.fRemembered, True)); Add(BoolToStr(Info^.fAuthenticated, True)); try // stLastSeen может быть 0 и тогда здесь ошибка будет Add(DateTimeToStr(SystemTimeToDateTime(Info^.stLastSeen))); except Add(‘’); end; try // stLastUsed может быть 0 и тогда здесь ошибка будет Add(DateTimeToStr(SystemTimeToDateTime(Info^.stLastUsed))); except Add(‘’); end; end; end;
CurNode := ASelected.GetNextChild(CurNode); end;
EndUpdate; end; end;
procedure ShowServices; var Info: __PBLUETOOTH_DEVICE_INFO; ServiceCount: dword; Services: array of TGUID; hRadio: THandle; Loop: integer; begin // Строим столбцы with ListView.Columns do begin BeginUpdate; with Add do Caption := 'GUID'; EndUpdate; end;
// Заполняем список with ListView.Items do begin BeginUpdate;
// Получаем размер массива сервисов ServiceCount := 0; Services := nil; hRadio := ASelected.Parent.ImageIndex; Info := ASelected.Data; // NEW FUNCTION BluetoothEnumerateInstalledServices(hRadio, Info, ServiceCount, nil);
// Выделяем память. SetLength(Services, ServiceCount);
// Получаем список сервисов BluetoothEnumerateInstalledServices(hRadio, Info, ServiceCount, PGUID(Services));
// Рисуем их for Loop := 0 to ServiceCount - 1 do with Add do Caption := GUIDToString(Services[Loop]);
// Очищаем память Services := nil;
EndUpdate; end; end;
begin ASelected := TreeView.Selected;
// Очищаем ListView with ListView do begin with Columns do begin BeginUpdate; Clear; EndUpdate; end;
with Items do begin BeginUpdate; Clear; EndUpdate; end; end;
// Заполняем информацией if Assigned(ASelected) then case ASelected.ImageIndex of -2: ShowServices; -1: ShowRadios; else if ASelected.ImageIndex > 0 then ShowDevices; end; end; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!