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

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;

 

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

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

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

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


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