Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-10-2006
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 19
marceloalegre Va por buen camino
Cool Deteccion de Dispositivos USB

Buenos Dias:
Estoy necesitando detectar los dispositivos usb conectados a la pc.
He encontrado un componente que es mytec Sytem Info pero es pago, y no se justifica comprarlo ya que este es un desarrollo muy pequeño.

¿Alguien me puede ayudar con este tema?, o recomendarme algun componente de existir?, Gracias Amigos!!
Responder Con Cita
  #2  
Antiguo 04-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Un par de preguntas. Cuando hablas de "dispositivos usb" ¿te refieres a cualquier dispositivo usb (Impresoras, ratones, etc ...) o a memorias usb?, y cuando dices "detectar" ¿te refieres a cuando se conectan o listar los que ya están conectados?
Responder Con Cita
  #3  
Antiguo 04-10-2006
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 19
marceloalegre Va por buen camino
Post

El tema es asi: tengo que saber cuando un modem usb se conecta a mi pc.
Si existe algun evento que me notifique de eso seria lo adecuado, sino estaria con un timer pooleando a la espera del dispositivo.

Lo que necesitaria saber para ser bien claros es ej:
cuando un usuario conecta a la pc el dispositivo "motorola usb modem" y a partir de ahi, actuar en consecuencia.

Saludos!
Responder Con Cita
  #4  
Antiguo 04-10-2006
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 19
marceloalegre Va por buen camino
Post

He encontrado esto en la web, pero no entiendo como usarlo... lo he instalado como paquete, pero realmente no se como puedo "ejecutarlo",,, quizas si alguien me pueda asistir con esto, pueda ir acercandome a la solución...
Gracias!

Código Delphi [-]
 
// Component to detect when usb devices are connected or disconnected
// using RegisterDeviceNotification

unit U_Usb;

interface

uses
  Windows, Messages, SysUtils, Classes, Forms;

type

  PDevBroadcastHdr  = ^DEV_BROADCAST_HDR;
  DEV_BROADCAST_HDR = packed record
    dbch_size: DWORD;
    dbch_devicetype: DWORD;
    dbch_reserved: DWORD;
  end;

  PDevBroadcastDeviceInterface  = ^DEV_BROADCAST_DEVICEINTERFACE;
  DEV_BROADCAST_DEVICEINTERFACE = record
    dbcc_size: DWORD;
    dbcc_devicetype: DWORD;
    dbcc_reserved: DWORD;
    dbcc_classguid: TGUID;
    dbcc_name: short;
  end;

const
  GUID_DEVINTERFACE_USB_DEVICE: TGUID = '{A5DCBF10-6530-11D2-901F-00C04FB951ED}';
  DBT_DEVICEARRIVAL          = $8000;          // system detected a new device
  DBT_DEVICEREMOVECOMPLETE   = $8004;          // device is gone
  DBT_DEVTYP_DEVICEINTERFACE = $00000005;      // device interface class

type

  TComponentUSB = class(TComponent)
  private
    FWindowHandle: HWND;
    FOnUSBArrival: TNotifyEvent;
    FOnUSBRemove: TNotifyEvent;
    procedure WndProc(var Msg: TMessage);
    function USBRegister: Boolean;
  protected
    procedure WMDeviceChange(var Msg: TMessage); dynamic;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property OnUSBArrival: TNotifyEvent read FOnUSBArrival write FOnUSBArrival;
    property OnUSBRemove: TNotifyEvent read FOnUSBRemove write FOnUSBRemove;
  end;

implementation

constructor TComponentUSB.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FWindowHandle := AllocateHWnd(WndProc);
  USBRegister;
end;

destructor TComponentUSB.Destroy;
begin
  DeallocateHWnd(FWindowHandle);
  inherited Destroy;
end;

procedure TComponentUSB.WndProc(var Msg: TMessage);
begin
  if (Msg.Msg = WM_DEVICECHANGE) then 
  begin
    try
      WMDeviceChange(Msg);
    except
      Application.HandleException(Self);
    end;
  end
  else
    Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.wParam, Msg.lParam);
end;

procedure TComponentUSB.WMDeviceChange(var Msg: TMessage);
var
  devType: Integer;
  Datos: PDevBroadcastHdr;
begin
  if (Msg.wParam = DBT_DEVICEARRIVAL) or (Msg.wParam = DBT_DEVICEREMOVECOMPLETE) then 
  begin
    Datos := PDevBroadcastHdr(Msg.lParam);
    devType := Datos^.dbch_devicetype;
    if devType = DBT_DEVTYP_DEVICEINTERFACE then 
    begin // USB Device
      if Msg.wParam = DBT_DEVICEARRIVAL then 
      begin
        if Assigned(FOnUSBArrival) then
          FOnUSBArrival(Self);
      end 
      else 
      begin
        if Assigned(FOnUSBRemove) then
          FOnUSBRemove(Self);
      end;
    end;
  end;
end;

function TComponentUSB.USBRegister: Boolean;
var
  dbi: DEV_BROADCAST_DEVICEINTERFACE;
  Size: Integer;
  r: Pointer;
begin
  Result := False;
  Size := SizeOf(DEV_BROADCAST_DEVICEINTERFACE);
  ZeroMemory(@dbi, Size);
  dbi.dbcc_size := Size;
  dbi.dbcc_devicetype := DBT_DEVTYP_DEVICEINTERFACE;
  dbi.dbcc_reserved := 0;
  dbi.dbcc_classguid  := GUID_DEVINTERFACE_USB_DEVICE;
  dbi.dbcc_name := 0;

  r := RegisterDeviceNotification(FWindowHandle, @dbi,
    DEVICE_NOTIFY_WINDOW_HANDLE
    );
  if Assigned(r) then Result := True;
end;

end.
Responder Con Cita
  #5  
Antiguo 04-10-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo lo he instalado tal cual lo pusiste aquí y funciona bien. Sólo tienes que programar sus eventos OnUSBArrrival y OnUSBRemoval. Propiamente no hay que "ejecutar" nada, tan sólo con ponerlo en el formulario, el sólo se activa (constructor Create).

Eso sí, imagino que sirve para cualquier dispositivo USB. Yo lo probé con una memoria. No sé si pueda mejorarse para ditinguir una memoria de un módem por ejemplo.

Por cierto, que se parece bastante a mi componente TCDChange pero para CDs. Está bueno saberlo para un USB.

// Saludos
Responder Con Cita
  #6  
Antiguo 04-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por roman
Por cierto, que se parece bastante a mi componente TCDChange pero para CDs. Está bueno saberlo para un USB.
Es cierto, el mismo mensaje que se utiliza para notificar que se inserto un cd, sirve para otros dispositivo. Lo malo es distinguir cual es, yo estaba buscando en la dirección de listar todos los dispositivos en busca del citado módem. Aunque no se si habrá un método mejor.

Última edición por roman fecha: 20-10-2014 a las 19:32:07.
Responder Con Cita
  #7  
Antiguo 04-10-2006
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 19
marceloalegre Va por buen camino
Post

Upps.. si perdon mi ingenuidad, no habia visto que en mi codigo estaba faltando hacer el register del component.... ahora ya lo tengo funcionando.
Igualmente esto no esta diferenciando que es lo que se esta conectando (dispositivo), voy a ver de chequear el registro para ver de conseguir esa informacion en el momento de que arribe un nuevo dispositivo... combinando cosas creo que vamos a salir a flote

gracias! y seguire viendo como dejar esto andandoooo
Responder Con Cita
  #8  
Antiguo 18-10-2014
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 14
FideRosado Va por buen camino
respuesta

roman , pon lo que hisistes aca, para aprender...
__________________
"Aquellos que dicen que algo no puede hacerse, suelen ser interrumpidos por otros que lo están haciendo"
Responder Con Cita
  #9  
Antiguo 20-10-2014
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por FideRosado Ver Mensaje
roman , pon lo que hisistes aca, para aprender...
Ya edité el enlace para que apunte a la ubicación actual.

// Saludos
Responder Con Cita
  #10  
Antiguo 22-09-2016
Rocio90 Rocio90 is offline
Miembro
NULL
 
Registrado: sep 2016
Posts: 12
Poder: 0
Rocio90 Va por buen camino
Muy util, gracias
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
desactivar dispositivos ramonibk API de Windows 2 22-03-2016 01:13:54
Detección de una unidad removible Pascalizado API de Windows 13 22-05-2011 19:54:51
Dispositivos móviles PacoPepe OOP 1 24-01-2006 22:29:25
Detección de navegador WEB aerosB4 Internet 5 08-03-2004 18:27:10
Detección de Carga de un programa craven Varios 3 24-11-2003 17:10:46


La franja horaria es GMT +2. Ahora son las 14:31:12.


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