Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-01-2021
Manu_Rx Manu_Rx is offline
Registrado
 
Registrado: jun 2015
Posts: 8
Poder: 0
Manu_Rx Va por buen camino
Cool Manejo de BLUETOOTH para Conectar

Hola

En Delphi, tengo claro como
Buscar dispositivos, emparejarlos, ver los emparejados y desemparejarlos.
También es sencillo, conectar con una impresora Bluetooth y por socket mandarle cosas a imprimir.

Pero no encuentro nada sobre lo siguiente:

Tengo varios altavoces Bluetooth y cada uno me aparece como emparejado. Pero quiero 'conectarme' con uno de ellos y desconectarme de otro.
En Windows está claro que ves los emparejados, le das al botón de conectar y te conecta. Pero necesito hacerlo desde Delphi. Alguien sabe cómo?

Gracias
Responder Con Cita
  #2  
Antiguo 22-01-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Manu_Rx Ver Mensaje
Tengo varios altavoces Bluetooth y cada uno me aparece como emparejado. Pero quiero 'conectarme' con uno de ellos y desconectarme de otro.
En Windows está claro que ves los emparejados, le das al botón de conectar y te conecta. Pero necesito hacerlo desde Delphi. Alguien sabe cómo?

Creo que no ha quedado nada claro de lo que quieres o del problema que tienes, pues la respuesta a tu pregunta es lo mismo que dices al principio:
Cita:
Empezado por Manu_Rx Ver Mensaje
En Delphi, tengo claro como Buscar dispositivos, emparejarlos, ver los emparejados y desemparejarlos.
También es sencillo, conectar con una impresora Bluetooth y por socket mandarle cosas a imprimir.
Responder Con Cita
  #3  
Antiguo 22-01-2021
Manu_Rx Manu_Rx is offline
Registrado
 
Registrado: jun 2015
Posts: 8
Poder: 0
Manu_Rx Va por buen camino
Hola,

Si, me expliqué mal.
Una cosa es ver los dispositivos emparejados y otra los conectados.

Centrándonos en los altavoces. Tengo tres dispositivos emparejados

ALTAVOZ1
Emparejado

ALTAVOZ2
Emparejado

ALTAVOZ3
Música Conectada

y el sonido se escucha por el ALTAVOZ3

Quiero poder desde Delphi, cambiar y que en vez de ser ALTAVOZ3 el que tenga 'Música conectada' sea ALTAVOZ2 por ejemplo.
Yo puedo cargar en un TMEMO los dispositivos Emparejados y me saldrá
ALTAVOZ1
ALTAVOZ2
ALTAVOZ3

Pero quiero saber cual de los tres está en modo 'Musica Conectada' y cómo puedo cambiarlo.

Gracias
Responder Con Cita
  #4  
Antiguo 09-02-2021
Manu_Rx Manu_Rx is offline
Registrado
 
Registrado: jun 2015
Posts: 8
Poder: 0
Manu_Rx Va por buen camino
Solucionado

En esta dirección

itectec.com/superuser/scripting-connecting-disconnecting-a-paired-bluetooth-device/

está la solución en el programa btcom.exe.

El tratamiento más o menos es:

Código Delphi [-]
Uses  System.Bluetooth, ShellApi, Winapi.Messages, AdvPanel;
//------------------------------------------------------------------------------
// ************** Procedimiento que Escanea Dispositivos Bluetooth *************
//------------------------------------------------------------------------------
procedure TForm1.DiscoveryD;
Var i: Integer;
begin
  FBluetoothManager := TBluetoothManager.Current;
  FAdapter := FBluetoothManager.CurrentAdapter;
  if FBluetoothManager.ConnectionState = TBluetoothConnectionState.Connected then Begin
    FPairedDevices := FBluetoothManager.GetPairedDevices;
  end;
end;
//------------------------------------------------------------------------------
// ************** Gestion de la selección de elementos *************************
//------------------------------------------------------------------------------
procedure TForm1.b01click(Sender: TObject);
Var i, n, w: Integer; iUID: String;
begin
 If BotonAltavoz.Down Then Begin
    i := (Sender as TAdvPanel).Tag;
    if FBluetoothManager.ConnectionState = TBluetoothConnectionState.Connected  then Begin
      iUID:= FPairedDevices[i].Address;
      n:= 0;
      if (Sender As TAdvPanel).ColorTo = BotonCogido then Begin  // BotonCogido esta en verde que significa que está activo
        EjecutaExterno(iUID, '110B', '-r'); // Desactivo los servicios
        EjecutaExterno(iUID, '110E', '-r');
        DiscoveryD; // Al parar los servicios, debo volver a leer los dispositivos emparejados, ya que cambia el orden
        w:= Damei(iUID);
        while (FPairedDevices[w].State = TBluetoothDeviceState.Connected) AND (n < 15) do begin
         Sleep(2000);
         DiscoveryD;
         w:= Damei(iUID);
         Inc(n);
        end;
      End Else Begin // Si el color no es BotonCogido Activo los servicios
        EjecutaExterno(iUID, '110E', '-c');
        EjecutaExterno(iUID, '110B', '-c');
        DiscoveryD;
        w:= Damei(iUID);
        while (FPairedDevices[w].State = TBluetoothDeviceState.Paired) AND (n < 15) do begin
         Sleep(2000);
         DiscoveryD;
         w:= Damei(iUID);
         Inc(n);
        end;
End;
 
      if NOT (N < 15) then Begin
        PanelMensaje.Caption:= '***** ERROR GESTIONANDO BLUETOOTH *****';
        Sleep(5000);
      End;
End;
 
//------------------------------------------------------------------------------
// ************** Ejecuta BTCOM para gestionar el BLUETOOTH ********************
//------------------------------------------------------------------------------
procedure TForm1.EjecutaExterno(DEVICE_ADDRESS, SERVICE_UUID, BTCOM_TIPE: STring);
var h: HWND; Folder, Comando, Parametros: String;
begin
    Folder := ExtractFilePath(Application.ExeName);
    Comando:= 'BtCom.exe';
    Parametros:= BTCOM_TIPE + ' -b"' + DEVICE_ADDRESS + '" -s' + SERVICE_UUID;
    ShellExecute(Handle, 'Open', PWideChar(Comando), PWideChar(Parametros), PWideChar(Folder), SW_HIDE);
    sleep(3000);
    h := FindWindow(nil, 'BtCom'); // Hago un bucle esperando que termine el programa Btcom
    while h <> 0 do Begin
      Sleep(3000);
      h := FindWindow(nil, 'BtCom');
    End;
end;
 
 
//------------------------------------------------------------------------------
// ************** Calcula el componente BLUETOOTH según su dirección MAC *******
//------------------------------------------------------------------------------
function  TForm1.Damei(Id: String): Integer;
VAr i: Integer;
Begin
  Result:= -1;
  for I := 0 to FPairedDevices.Count -1 do Begin
    if FPairedDevices.Items[i].address = Id then Begin
      Result:= I;
      Exit;
    End;
  End;
End;

Y esto me permite conectar y desconectar los diferentes altavoces inalámbricos que tengo emparejados.
i := (Sender as TAdvPanel).Tag; TAdvPanel corresponde a TMSSoftware
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error en Aplicacion para Conexion Bluetooth kurono Desarrollo en Delphi para Android 1 12-05-2014 04:38:10
Emparejar dispositivos bluetooth sur-se Varios 0 14-01-2010 11:44:00
programar bluetooth nitoman C++ Builder 0 02-11-2008 11:30:41
SDK C++ delphi Bluetooth Preguntas Descendents Varios 2 01-04-2007 19:07:05
Componentes para manejo de CAD oscjae Gráficos 0 10-10-2005 15:42:53


La franja horaria es GMT +2. Ahora son las 17:27:15.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi