Ir al contenido


Foto

[DELPHI] Detectar dispositivos Bluetooth


  • Por favor identifícate para responder
15 respuestas en este tema

#1 seoane

seoane

    Advanced Member

  • Administrador
  • 1.257 mensajes
  • LocationEspaña

Escrito 30 enero 2011 - 04:29

Aquí dejo otro jueguetito  :) . Se trata de una pequeña aplicación de consola que busca, de forma continua, los dispositivos Bluetooth que se encuentran dentro de nuestro alcance. Así cuando un dispositivo nuevo entra dentro del alcance de nuestro Bluetooth muestra un mensaje con la fecha, la hora y el identificador del dispositivo, y cuando el dispositivo se apaga o se aleja de nosotros muestra otro mensaje.

Hay varias utilidades para esto, pero la mas divertida  :) es controlar quien se encuentra cerca de nuestro ordenador gracias a su teléfono móvil. Hoy en día mucha gente tiene el Bluetooth activado siempre, y en gran parte es culpa de los "manos libres" de los coches que necesitan tener esta opción activada para funcionar.

Como iba diciendo, con solo hacer esto:


delphi
  1. blue > registro.txt


tendremos un registro de quien y cuando se acerca a nuestro ordenador. Y si lo usamos en una oficina, por ejemplo, podemos saber la hora en que la gente entra y sale de trabajar  :D

Otro posible uso del código seria hacer una aplicación que bloquee nuestro escritorio si detecta que nuestro teléfono móvil no esta cerca porque, por ejemplo, nos hemos tenido que ir con prisas de la oficina sin acordarnos de apagar el ordenador. Pero eso lo dejaremos para mas adelante ...

El programa tiene un solo problema, cuando el teléfono que se quiere usar ya ha sido autentificado en windows, por ejemplo para pasarle archivos, aparecerá siempre como activo aunque no se encuentre cerca. Este es un problema que todavía no he resuelto  :( , pero con los teléfonos que no han sido autentificados funciona de maravilla.

PD: Si lo probáis tened paciencia, puede tardar hasta 20 segundos en detectar los dispositivos.

Archivos adjuntos


  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 30 enero 2011 - 04:59

Muy interesante.

Gracias por este muy  buen aporte.  (y) (y) (y) (y)
  • 0

#3 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.963 mensajes
  • LocationMadrid - España

Escrito 30 enero 2011 - 05:57

Pues después de probar un rato, no me funciona.  :(

Te explico. Mi PC no tiene Bluetooth de serie, coloco un dispositivo externo USB tipo pendrive. Tu programita Blue.exe detecta tres dispositivos Bluetooth que no tienen que ver con teléfonos, sino con el mismo adaptador Bluetooth que utilizo. Y...  nada mas.

Supongo que algo tiene que ver mi dispositivo Bluetooth externo en esto. Cuando tenga mas tiempo lo trataré de probar en un portátil.


Saludos.
  • 0

#4 Caral

Caral

    Advanced Member

  • Administrador
  • 4.261 mensajes
  • LocationCosta Rica

Escrito 30 enero 2011 - 06:58

Hola
Como siempre, interesante, practico y Magistral.
Saludos
  • 0

#5 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.029 mensajes
  • LocationSanto Domingo

Escrito 30 enero 2011 - 07:26

Funciona muy bien, gracias por el aporte. Lo unico es lo que ya indicaste que siempre detecta los dispositivos registrados aunque esten apagagos o lejos.

Gracias de nuevo por mostrarnos tu maestria (y)
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.177 mensajes
  • LocationMéxico

Escrito 30 enero 2011 - 08:16

Muy interesante aplicativo (y), que lástima que ninguna de mis dos máquinas cuente con bluetooth :(

Salud OS
  • 0

#7 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 31 enero 2011 - 07:54

Maestro (y)
gracias por compartirlo.


Saludos!
  • 0

#8 andres1569

andres1569

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 431 mensajes

Escrito 31 enero 2011 - 10:46

Pues después de probar un rato, no me funciona.  :(

Te explico. Mi PC no tiene Bluetooth de serie, coloco un dispositivo externo USB tipo pendrive. Tu programita Blue.exe detecta tres dispositivos Bluetooth que no tienen que ver con teléfonos, sino con el mismo adaptador Bluetooth que utilizo. Y...  nada mas.

Supongo que algo tiene que ver mi dispositivo Bluetooth externo en esto. Cuando tenga mas tiempo lo trataré de probar en un portátil.


Saludos.

Muchas gracias por el aporte, aunque me pasa igual que a Escafandra, de momento no me funciona, también tengo un Bluetooth USB tipo pendrive ...
  • 0

#9 seoane

seoane

    Advanced Member

  • Administrador
  • 1.257 mensajes
  • LocationEspaña

Escrito 31 enero 2011 - 03:53

Pues mi dispositivo bluetooth también es usb, de hecho es el mas barato que encontré, un zaapa.

Aunque reconozco que el código que puse tiene sus problemas, por ejemplo, he probado a tenerlo encendido toda la noche, y perdió y volvió a encontrar mi móvil mas de 10 veces. No se si el problema es del zaapa (ya he tenido problemas con el usando aplicaciones de nokia), del móvil que desconecta el bluetooth o es el código el que tiene el fallo.

He tenido bastantes problemas para encontrar información en internet sobre el bluetooth parece que no hay mucho interés por este tema. Lo único que he encontrado, a parte de lo que puse arriba, es esta otra de listar los dispositivos:



delphi
  1. const
  2.   Bthprops = 'Bthprops.cpl';
  3.   BLUETOOTH_MAX_NAME_SIZE = 248;
  4.  
  5. type
  6.   BLUETOOTH_DEVICE_SEARCH_PARAMS = record
  7.     dwSize: DWORD;
  8.     fReturnAuthenticated: BOOL;
  9.     fReturnRemembered: BOOL;
  10.     fReturnUnknown: BOOL;
  11.     fReturnConnected: BOOL;
  12.     fIssueInquiry: BOOL;
  13.     cTimeoutMultiplier: Char;
  14.     hRadio: THandle;
  15.   end;
  16.   PBLUETOOTH_DEVICE_SEARCH_PARAMS = ^BLUETOOTH_DEVICE_SEARCH_PARAMS;
  17.  
  18.  
  19.   BLUETOOTH_ADDRESS = record
  20.     case Integer of
  21.       0: (ullLong: int64);
  22.       1: (rgBytes: array[0..5] of Byte;)
  23.   end;
  24.  
  25.   BLUETOOTH_DEVICE_INFO = record
  26.     dwSize: DWORD;
  27.     Address: BLUETOOTH_ADDRESS;
  28.     ulClassofDevice: ULONG;
  29.     fConnected: BOOL;
  30.     fRemembered: BOOL;
  31.     fAuthenticated: BOOL;
  32.     stLastSeen: SYSTEMTIME;
  33.     stLastUsed: SYSTEMTIME;
  34.     szName: array[0..BLUETOOTH_MAX_NAME_SIZE - 1] of WideChar;
  35.   end;
  36.   PBLUETOOTH_DEVICE_INFO = ^BLUETOOTH_DEVICE_INFO;
  37.  
  38.   HBLUETOOTH_DEVICE_FIND = THandle;
  39.  
  40.   function BluetoothFindFirstDevice(
  41.     pbtsp: PBLUETOOTH_DEVICE_SEARCH_PARAMS;
  42.     pbtdi: PBLUETOOTH_DEVICE_INFO): HBLUETOOTH_DEVICE_FIND; stdcall;
  43.   external Bthprops;
  44.  
  45.   function BluetoothFindNextDevice(
  46.     hFind: HBLUETOOTH_DEVICE_FIND;
  47.     pbtdi: PBLUETOOTH_DEVICE_INFO): BOOL; stdcall;
  48.   external Bthprops;
  49.  
  50.   function BluetoothFindDeviceClose(
  51.     hFind : HBLUETOOTH_DEVICE_FIND): BOOL; stdcall;
  52.   external Bthprops;
  53.  
  54.   function BluetoothGetDeviceInfo(
  55.     hRadio: THandle;
  56.     pbtdi: PBLUETOOTH_DEVICE_INFO): DWORD; stdcall;
  57.   external Bthprops;
  58.  
  59. procedure GetDevices(ARadio: THandle);
  60. var
  61.   DeviceInfo: BLUETOOTH_DEVICE_INFO;
  62.   DeviceSearchParams: BLUETOOTH_DEVICE_SEARCH_PARAMS;
  63.   DeviceFind: HBLUETOOTH_DEVICE_FIND;
  64. begin
  65.   FillChar(DeviceSearchParams, SizeOf(BLUETOOTH_DEVICE_SEARCH_PARAMS), 0);
  66.   with DeviceSearchParams do
  67.   begin
  68.     dwSize:= SizeOf(BLUETOOTH_DEVICE_SEARCH_PARAMS);
  69.     //fReturnAuthenticated:= TRUE;
  70.     //fReturnRemembered:= TRUE;
  71.     fReturnUnknown:= TRUE;
  72.     //fReturnConnected:= TRUE;
  73.     //fIssueInquiry:= TRUE;
  74.     hRadio := ARadio;
  75.   end;
  76.   FillChar(DeviceInfo, SizeOf(BLUETOOTH_DEVICE_INFO), 0);
  77.   DeviceInfo.dwSize:= SizeOf(BLUETOOTH_DEVICE_INFO);
  78.   DeviceFind := BluetoothFindFirstDevice(@DeviceSearchParams,@DeviceInfo);
  79.   if (DeviceFind <> 0) then
  80.   begin
  81.     repeat
  82.       ShowMessage(DeviceInfo.szName);
  83.       FillChar(DeviceInfo, SizeOf(BLUETOOTH_DEVICE_INFO), 0);
  84.       DeviceInfo.dwSize := SizeOf(BLUETOOTH_DEVICE_INFO);
  85.     until (not BluetoothFindNextDevice(DeviceFind, @DeviceInfo));
  86.     BluetoothFindDeviceClose(DeviceFind);
  87.   end;
  88. end;



... pero este todavía es peor, solo refresca la lista de dispositivos si manualmente se actualiza la lista desde el explorador de windows  :(

Me parece que esto se va a quedar solo como "prueba de concepto"  |-)

PD: Andar con cuidado, nunca se sabe quien nos puede estar rastreando  :D  :D  :D
  • 0

#10 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 02 julio 2011 - 09:48

Hola, antes que nada felicitaciones por tus avances en bluetooth.
Disculpa si ya diste por terminado este tema. Curiosamente en estos momento me encuentro tratando de realizar un programa que utilice una libreria llamada btconfig, veo en tus fuentes que tu utilizas la libreria llamada Blue.bdsproj.local
Las estructuras (type) de datos que muestras se parecen muchos a las mías http://www.delphiacc...ion-de-una-dll/ la verdad que me eh quedado un poco trabado para recibir la información de lo dispositivos que tengo cerca, si puedes darme una mano seria de gran ayuda, lo que yo estoy haciendo es en lazarus para windows.

Desde ya muchas gracias.


  • 0

#11 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.029 mensajes
  • LocationSanto Domingo

Escrito 03 julio 2011 - 09:34

has visto estos componentes , talvez te den algunas ideas, ademas tienen un demo.




  • 0

#12 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 06 julio 2011 - 08:52

Muchas gracias, voy a ver las licencias de ese componente y ver si se puede pasar a lazarus.  Estoy viendo que en : http://windows-api-h...HZWItO4W0-ODtIw hay muchas librerias pero con precio, estoy interesado en una gratuita y que se puede ver el código para ver si se lo puede pasar a lazarus.

Desde ya muchas gracias.

  • 0

#13 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.029 mensajes
  • LocationSanto Domingo

Escrito 06 julio 2011 - 10:18


mira este enlace, talvez te sirva de algo.

http://bluehack.elha...numeracion.html 




  • 0

#14 waguero

waguero

    Newbie

  • Miembros
  • Pip
  • 2 mensajes

Escrito 31 enero 2013 - 04:54

Me podría decir como visualizar el código que figura como blue > registro.txt, o mejor dicho cual sería el código que se plantea en el primer comentario este este post.
  • 0

#15 waguero

waguero

    Newbie

  • Miembros
  • Pip
  • 2 mensajes

Escrito 31 enero 2013 - 05:22

Luego de postear el comentario lo pude ver, gracias. Ahora lo probaré.
  • 0

#16 SebaV222

SebaV222

    Newbie

  • Miembros
  • Pip
  • 1 mensajes

Escrito 16 junio 2014 - 01:27

Me pasa lo mismo, no puedo ver el documento.
  • 0