Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-08-2012
Alan_B Alan_B is offline
Miembro
NULL
 
Registrado: ago 2012
Posts: 12
Poder: 0
Alan_B Va por buen camino
Question Conexión USB con celular!

Hola soy nuevo en este foro, estoy comenzando a utilizar este lenguaje, necesito hacer una aplicacion que me conecte con el celular y encontre una libreria (creo que se le llama asi), pero nose como utilizarla en mi code, alguien me podria ayudar a utilizarla??? Probe guardandola como "usb.pas" pero cuando trato de compilar me dice que falta "usb.dcu" y nose porque sucede esto... La libreria es la siguiente y su autor es oOXTCOo... Espero alguien me pueda ayudar.... Gracias!

Código:
unit USB;

interface
Uses SysUtils, Forms, Windows;

{******************************************************************************}
{*                       USB - Read / Write Unit                              *}
{*                          by Harald Kubovy                                  *}
{*                                                                            *}
{*  How To USE:                                                               *}
{*  Sending and Reading Data to Device:                                       *}
{*  string_result:= RWUSB('DATA TO SEND IN HEX', Read, Timeout);              *}
{*                                                                            *}
{*  EXAMPLE (ONLY SENDING):                                                   *}
{*  s:= RWUSB('FF FF FF');                                                    *}
{*                                                                            *}
{*  s is String Result of Readed Data from Device                             *}
{*  'FF FF FF' is Data to Send in Hex  (this will send FFFFFF to Device       *}
{*                                                                            *}
{*                                                                            *}
{*  EXAMPLE WITH READING AFTER WRITING:                                       *}
{*  s:= RWUSB('FFFF', 16);                                                    *}
{*                                                                            *}
(*  16 = How mutch to Read / 0 for no Reading                                 *)
{*                                                                            *}
{*  EXAMPLE WITH TIMEOUT:                                                     *}
{*  s:= RWUSB('FFFF', 16, 100);                                               *}
{*                                                                            *}
{*  100 is the Reading Timeout, Standart is 500/ms.                           *}
{*                                                                            *}
{*                                                                            *}
{* Copyright - Do whatever you whant with it  ;o)                             *}
{******************************************************************************}



type
TSetofChars = Set of Char;

  Function USBOpenDriver:boolean;
  Function USBCloseDriver:boolean;
  function USBReadText(BytesRead: cardinal; timeout: cardinal = 500): string;
  function USBReadHEX(BytesRead: cardinal; timeout: cardinal = 500): string;
  function RWUSB(frame: string; readLen:integer = 0; ReadTimeout: integer = 500; Typ : String = 'HEX') : string;
  procedure USBWriteHEX(frame: string);

implementation


{ Get Handle of DeviceDriver }
var USBPORT:Thandle = INVALID_HANDLE_VALUE;

{$HINTS OFF}
{ Open USB Driver }
Function USBOpenDriver:boolean;
begin
  // Open Device Path  \\?\USB#Vid_058b&Pid_0015#5&25ea51ff&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
  USBPORT:= CreateFile('\\?\USB1', GENERIC_WRITE or GENERIC_READ,
  FILE_SHARE_WRITE or FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED OR FILE_ATTRIBUTE_NORMAL, 0);
  USBOpenDriver:= USBPORT <> INVALID_HANDLE_VALUE;
  if USBPORT = INVALID_HANDLE_VALUE then // error at open port
    begin
      result:=false;
    end else result:=true;
end;
{$HINTS ON}


Function USBCloseDriver:boolean;
begin
  USBCloseDriver := CloseHandle(USBPORT);
  USBPORT := INVALID_HANDLE_VALUE;
end;


function NurBestimmteZeichen (const aValue : String; aChars : TSetofChars) : String;
var
  i: Integer;
  newString : string;
begin
  newString := '';
  for i := 0 to Length(aValue) do
  begin
    if aValue[i] in aChars then
    begin
      newString := newString + aValue[i];
    end;
  end;
  result := newString;
end;



Function HexToStr(s: String): String;
Var
 i : Integer;
Begin
  Result:=''; i:=1;
  While i<Length(s) Do
  Begin
    Result:=Result+Chr(StrToIntDef('$'+Copy(s,i,2),0));
    Inc(i,2);
  End;
End;


Function StrToHex(s: String): String;
Var
  i : Integer;
Begin
  Result:='';
  If Length(s)>0 Then
    For i:=1 To Length(s) Do Result:=Result+IntToHex(Ord(s[i]),2);
End;



Function USBReadTEXT(BytesRead : dWord; timeout: cardinal = 500) : string;
var
  d: array[0..10000] of byte; {Readed Data}
  s, buffer: string;
  i, Tmp: Integer;
  Ovr : TOverlapped;
  count :cardinal; {Count = How mutch Readed Bytes}
begin
  Result := '';
  count:=0;
  Fillchar( d, sizeof(d), 0 );
  FillChar(Ovr, SizeOf(TOverlapped), 0);
  Ovr.hEvent := CreateEvent(nil, true, FALSE, nil);
  if not ReadFile(USBPORT, d, BytesRead, count, @ovr) then
    if GetLastError=Error_IO_Pending then
      if WaitForSingleObject(ovr.hEvent, timeout) = WAIT_OBJECT_0 then
        GetOverlappedResult(USBPORT, ovr, count, false)
  else CancelIo(USBPORT);
  CloseHandle(Ovr.hEvent);
  s := '';
  for i := 0 to count-1 do
  begin
    Tmp:=ord(d[i]);
    s := s + Char(Tmp);
  end;
  {Convert to String Text}
  s := strtohex(s);
  buffer:='';
  for i:=1 to length(s) do
  begin
    if Odd(i) then
    begin
      buffer := '';
      buffer := hextostr(s[i] + s[i+1]);
      buffer := NurBestimmteZeichen(buffer,['0'..'9','a'..'z','A'..'Z','.'..':',' '..'?']);
      result := result+buffer;
    end;
  end;
end;



Function USBReadHEX(BytesRead : dWord; timeout: cardinal = 500) : string;
var
  d: array[0..10000] of byte; {Readed Data}
  s: string;
  i, Tmp: Integer;
  Ovr : TOverlapped;
  count :cardinal; {Count = How mutch Readed Bytes}
begin
  Result := '';
  count:=0;
  Fillchar( d, sizeof(d), 0 );
  FillChar(Ovr, SizeOf(TOverlapped), 0);
  Ovr.hEvent := CreateEvent(nil, true, FALSE, nil);
  if not ReadFile(USBPORT, d, BytesRead, count, @ovr) then
    if GetLastError=Error_IO_Pending then
      if WaitForSingleObject(ovr.hEvent, timeout) = WAIT_OBJECT_0 then
        GetOverlappedResult(USBPORT, ovr, count, false)
  else CancelIo(USBPORT);
  CloseHandle(Ovr.hEvent);
  s := '';
  for i := 0 to count-1 do
  begin
    Tmp:=ord(d[i]);
    s := s + Char(Tmp);
  end;
  Result := strtohex(s);
end;



Function _USBWritePointerA(bp : Pointer; SizeToSend : DWord; timeout: integer) : Cardinal;
var
  Ovr : TOverlapped;
begin
    Result := 0;
    FillChar(Ovr, SizeOf(TOverlapped), 0);
    Ovr.hEvent := CreateEvent(nil, true, FALSE, nil);
    if not WriteFile(USBPort, bp^, SizeToSend, Result, @ovr) then
        if GetLastError=Error_IO_Pending then
            if WaitForSingleObject(ovr.hEvent, timeout) = WAIT_OBJECT_0 then
                GetOverlappedResult(USBPORT, ovr, Result, false)
            else CancelIo(USBPORT);
    CloseHandle(Ovr.hEvent);
end;



procedure USBWriteHEX(frame: string);
var
  BytesWritten: DWord;
begin
  while Pos(' ', FRAME) > 0 do Delete(FRAME,Pos(' ', FRAME),1);
  frame:=hextostr(frame);
  WriteFile(USBPORT, (Pchar(frame))^, SizeOf(frame), BytesWritten, nil);
end;




Function USBWritePointerA(bp : Pointer; SizeToSend : DWord) : boolean;
begin
  Result := _USBWritePointerA(bp, SizeToSend, $688) = SizeToSend;
end;



Function USBWriteStringA(SendString : String) : boolean;
var
  StrSize : Word;
begin
  StrSize := Length(SendString);
  Result := _USBWritePointerA(@SendString[1], StrSize, $688) = StrSize;
end;


function RWUSB(frame: string; readLen:integer = 0; ReadTimeout: integer = 500; Typ : String = 'HEX') : string;
begin
  while Pos(' ', FRAME) > 0 do Delete(FRAME,Pos(' ', FRAME),1);
  if length(frame) >0 then USBWriteStringA(hextostr(frame));
  Application.ProcessMessages;
  sleep(ReadTimeout);
  if (ReadLen >0) and (Typ='HEX')    then result:=USBReadHEX(readLen, ReadTimeout);
  if (ReadLen >0) and (Typ='STRING') then result:=USBReadText(readLen, ReadTimeout);
end;


end.
Responder Con Cita
  #2  
Antiguo 01-09-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Alan_B.

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

No tuve inconvenientes en compilar la unidad.

En un nuevo proyecto : File-> New-> Unit -> Borrar el contenido que predefine Delphi-> Pegar el código que adjuntaste-> File-> SaveAs: USB.PAS -> compilar.

Por si tenes problemas te adjunto el .pas y el .dcu, te aclaro que no probé si el código funciona.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 20-09-2012 a las 19:27:44.
Responder Con Cita
  #3  
Antiguo 03-09-2012
Alan_B Alan_B is offline
Miembro
NULL
 
Registrado: ago 2012
Posts: 12
Poder: 0
Alan_B Va por buen camino
Gracias Genio!!! Me estoy iniciando y no sabia esto... Y para agregarlo en mo proyecto como tengo que hacer, para que las funciones lo hagan correctamente???

PD: Gracias por tu respuesta, yo soy de Argentina y la verdad que no logro encontrar cursos de Delphi!! Espero progresar gracias a este foro ;-) Vos me darias tips???

EDITADO! Add to project... Shift + F11

Última edición por Alan_B fecha: 03-09-2012 a las 00:29:45.
Responder Con Cita
  #4  
Antiguo 03-09-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Alan_B.

Hay muchos tips en la sección trucos, además muchos te aparecerán en las mismas búsquedas.

Quizá conozcas alguno de los enlaces que te voy a poner, pero si no, espero que te sean útiles:Y por supuesto en los foros de Club Delphi vas a encontrar respuesta a casi cualquier duda que pudieras presentar.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 03-09-2012
Alan_B Alan_B is offline
Miembro
NULL
 
Registrado: ago 2012
Posts: 12
Poder: 0
Alan_B Va por buen camino
Porque al querer compilar este code:

Código:
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
s:=RWUSB('',32);
usb.USBOpenDriver('\\\USB#VID_0C44&PID_0022#5&17C28CDB&0&1#{feb8d079-0681-11d4-9531-0060089abc08}');
memo1.Lines.add(s);
end;
Me tira estos errores???
[Error] Unit1.pas(31): Too many actual parameters
[Fatal Error] iDEN.dpr(6): Could not compile used unit 'Unit1.pas'

Intente de todo y no logro dar con la posible solucion!!!

Ggracias desde ya!
Responder Con Cita
  #6  
Antiguo 03-09-2012
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
El error te indica que estas pasando muchos argumentos a la función.

Si te fijas en la declaración de la función:
Código Delphi [-]
Function USBOpenDriver:boolean;

Esta no recibe argumentos, y tu le estas enviando:
Código Delphi [-]
usb.USBOpenDriver('\\\USB#VID_0C44&PID_0022#5&17C28CDB&0&1#{feb8d079-0681-11d4-9531-0060089abc08}')

Como es una función que evalúa si pudo abrir el puerto USB, debería ser:

Código Delphi [-]
if usb.USBOpenDriver() then
...

Saludos
Responder Con Cita
  #7  
Antiguo 03-09-2012
Alan_B Alan_B is offline
Miembro
NULL
 
Registrado: ago 2012
Posts: 12
Poder: 0
Alan_B Va por buen camino
Ahhhhhhh! Es verdad!!! Una función de tipo boolean, devuelve un True o en su defecto un False, verdad? Ahora estoy en mi trabajo pero esta noche pruebo y confirmo por si le sirve a alguien más el dato!

Gracias por tu respuesta!
Alan_B !
Responder Con Cita
  #8  
Antiguo 04-09-2012
Alan_B Alan_B is offline
Miembro
NULL
 
Registrado: ago 2012
Posts: 12
Poder: 0
Alan_B Va por buen camino
Perdón por el doble post, no pude editar el anterior... Intenté con la siguiente forma

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
s:= RWUSB('1E034D006F007400', 10);
if USB.USBOpenDriver('\\\USB#VID_0C44&PID_0022#5&17C28CDB&0&3#{9d7debbc-c85d-11d1-9eb4-006008c3a19a}') = True then
memo1.Lines.Add('Phone found!') else
memo1.lines.Add('Phone not found!');
end;

end.

Arrojandome los mismos errores antes mencionados... Probe de la siguiente y compila, pero sin resultados exitosos a la hora de lograr conexion...

Código Delphi [-]
  USBPORT:= CreateFile('\\?\USB1', GENERIC_WRITE or GENERIC_READ, FILE_SHARE_WRITE or FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED OR FILE_ATTRIBUTE_NORMAL, 0);

Copie el device path reemplazando "USB1", pero sin exito como mencioné!!!
Sigo probando, si alguien me sigue ayudando soy feliz!!!

Alan_B!
Responder Con Cita
  #9  
Antiguo 04-09-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Yo creo que aprenderías mas fácilmente iniciando con cosas sencillas. Hay muchísimos recursos para ello. Ya cuando domines el lenguaje y entiendas bien sus alcances ya podrás meterte en cosas mas complejas. Sobre todo si lo que deseas lograr no lo dominas, como en el caso de tu ejemplo que es una conexión por código a un celular vía USB. Te aseguro que muchos del club no sabemos como hacerlo a pesar de que tenemos ya buen tiempo en esto. Si no lo haces así te vas a encontrar con mil cosas que no entenderás.

Programar no es tan fácil como se piensa y no es cuestión de descargar algo ya hecho, cambiarle 2 o 3 cosas y ya tienes algo funcional. Es como querer ser mecánico sin saber la diferencia entre llaves milimétricas y llaves inglesas. A final de cuentas a todos se nos ocurrió en algún momento lograr que la computadora hiciera algo (abrir una puerta, mandar un mensaje, etc.) y siempre nos decían "haz un programa" y así muchos terminanos enamorados de la programación, sobre todo en Delphi.

Saludos
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #10  
Antiguo 05-09-2012
Alan_B Alan_B is offline
Miembro
NULL
 
Registrado: ago 2012
Posts: 12
Poder: 0
Alan_B Va por buen camino
Gracias por el consejo de todas formas! Te cuento que estoy aprendiendo Delphi7, conozco C# pero me estan pidiendo un code en este lenguaje y vi que este foro tenia muchos años, motivos por los cales me registre, por la experiencia que sin dudas hay en este... Solo pedi una ayuda ya que vi que en otros foros utilizan este "unit" para sus aplicaciones y yo no logro entender como lo hacen, no me comparten la forma en que lo configuran/utilizan... Si cause molestias disculpas, repito solo queria una mano, el code esta escrito solo que no entiendo como utilizarlo...

Saludos y Gracias!

Última edición por Alan_B fecha: 05-09-2012 a las 05:20:10.
Responder Con Cita
  #11  
Antiguo 06-09-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Alan_B.

Primero analicemos la funcion USBOpenDriver:
Código Delphi [-]
Function USBOpenDriver:boolean;
begin
  USBPORT := CreateFile('\\?\USB1', GENERIC_WRITE or GENERIC_READ,
  FILE_SHARE_WRITE or FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED OR FILE_ATTRIBUTE_NORMAL, 0);
  USBOpenDriver:= USBPORT <> INVALID_HANDLE_VALUE;
  if USBPORT = INVALID_HANDLE_VALUE then // error at open port
    result:=false
  else
    result:=true;
end;
  1. Llama a la función CreateFile cuyos detalles podes mirar aquí:CrateFile function. El resultado queda en la variable USBPORT de tipo THandle.
  2. Asigna a la variable USBPORT el valor obtenido de comparar el resultado de CreateFile con INVALID_HANDLE_VALUE. Esta línea la veo redundante y prescindible(excepto para guardar compatibilidad con Pascal).
  3. Nuevamente evalua y asigna el resultado.

Particularmente y sin conocer sobre celulares, la hubiera escrito así:
Código Delphi [-]
function USBOpenDriver(PathToPhone: string):boolean;
begin
  USBPORT := CreateFile(PChar(PathToPhone), GENERIC_WRITE or GENERIC_READ,
    FILE_SHARE_WRITE or FILE_SHARE_READ, nil, OPEN_EXISTING,
    FILE_FLAG_OVERLAPPED OR FILE_ATTRIBUTE_NORMAL, 0);
  Result := USBPORT <> INVALID_HANDLE_VALUE
end;

La llamada correcta a la función es el que te sugirió cloayza, por ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not USBOpenDriver then  // error
    raise Exception.Create('No se encuentra el celular');
  // demas operaciones
  // ...

end;
Supongo que si la función te muestra el error, será debido a que no encuentra la ruta, pero hasta allí llegan mis conocimientos sobre rutas a celulares...

También podés reescribir la función USBOpenDriver para que admita diferentes rutas
Código Delphi [-]
function USBOpenDriver(PathToPhone: string):boolean;
begin
  USBPORT := CreateFile(PChar(PathToPhone), GENERIC_WRITE or GENERIC_READ,
    FILE_SHARE_WRITE or FILE_SHARE_READ, nil, OPEN_EXISTING,
    FILE_FLAG_OVERLAPPED OR FILE_ATTRIBUTE_NORMAL, 0);
  Result := USBPORT <> INVALID_HANDLE_VALUE
end;
y luego recompilar la unidad...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 06-09-2012
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
amigo eficas e estado viendo este hilo y analizando el codigo y el ejemplo que hiciste puso la cosa mas claras pero quisiera saber que tipo de direccion hay que poner en este cambio que le hiciste a la funcion si es de tipo C:\,G:\, H:\ etc... o de este tipo USB\VID_0930&PID_6545\001D0F0C73C8B92053110130

y una cosa mas esta libreria funciona solo para dipositivos moviles o para cualquier dipositivo usb como camara,memoria flash,microchip pci etc...
Responder Con Cita
  #13  
Antiguo 06-09-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
No te apures. Si ya conoces C te va a ser sencillo adaptarte. Me parece que eficsa ya puso algo que te puede servir sin duda. Creo que el path que utiliza la unit para conectarse al teléfono es la que le sirvió a quien la desarrollo y supongo que cambia de acuerdo al teléfono que se vaya a usar, deduzco eso dado la línea comentada en el código original.
Yo creo que tendrías que llamar primero a Opendriver tal como está en la interface, sin parámetros...y evaluar si te devuelve TRUE ya posteriormente usar las funciones para leer o escribir.

Se parecen mucho a las funciones de bajo nivel que tiene delphi para leer y escribir ficheros.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #14  
Antiguo 06-09-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

La verdad es que es la primera vez que intento acceder a un celular. Pero pensando en que era un dispositivo extraible, este código que uso al efecto, me detecta correctamente si está conectado o no:
Código Delphi [-]
function OpenUSB(aDrv: char): THandle;
var
  Root, Vol: string;
begin
  Root := aDrv + ':\';
  Vol  := Format('\\.\%s:', [aDrv]);
  Result := CreateFile(PChar(Vol),
    GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,
    nil, OPEN_EXISTING, 0, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if OpenUSB('F') = INVALID_HANDLE_VALUE then
    raise Exception.Create('Error en la conección.')
  else
    ShowMessage('Todo bién, continuamos...');
end;
Ahora convengamos, sé que es la unidad 'F' por que previamente me fije cuál era. Si agrego un pen drive, situado en la unidad 'E' y uso la función OpenUSB con el argumento 'E' funciona igualmente. Por otro lado estoy accediendo a la memoria del celular no al celular mismo....

La cosa debe pasar por la cadena '\\?\USB#Vid_058b&Pid_0015#5&25ea51ff&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed'... Creo, como AzidRain, que es propia de cada teléfono y realmente no sé como obtenerla.

Como dato adicional, en mi caso, cambiando el '?' por la letra 'F' se queda pensando un poco y luego lanza el error INVALID_HANDLE_VALUE.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #15  
Antiguo 06-09-2012
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
yo tambien probe y igual a ti eficas se queda pensando un poco y luego tira el error de invalido ahora para obtener el codigo \\?\USB#Vid_058b&Pid_0015#5&25ea51ff&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed se obtiene en las propiedades de administracion de dipositivo de los puerto usb en la paleta detalle ahi se encuentra eso es obtenido manualmente por codigo ni idea

por lo visto creo que este codigo es para conectarse a dipositivos moviles entonces consiguire un celular para tener algun resultado
Responder Con Cita
  #16  
Antiguo 06-09-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola kurono.

No dejes de avisar los resultados, es feo esto de quedar con la intriga

Si no habrá que esperar que los entendidos en el tema (que los hay en el Club) nos vengan a arrojar un poco de luz...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #17  
Antiguo 06-09-2012
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Hola.

Es importante saber que es lo que se pretende obtener del teléfono conectado y peligrosa la escritura.

El acceso a los dispositivos físicos, sean discos o USB, Flash... se realiza igual, con la API CreateFile En caso de desear abrir un dispositivo físico, el nombre debe ser "\\.\PhysicalDriveX" siendo X un número de unidad física que comienza por 0. Si deseamos abrir una unidad lógica, el nombre será "\\.\L:" siendo L la letra de unidad. En cambio \\.\\L:\ abre el directorio raíz.

Cita:
Empezado por ecfisa Ver Mensaje
...debe pasar por la cadena '\\?\USB#Vid_058b&Pid_0015#5&25ea51ff&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed'... Creo, como AzidRain, que es propia de cada teléfono y realmente no sé como obtenerla.
Esa cadena se extrae del Registro de Windows en la clave: "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Enum" donde aparecen cada una de las unidades USB conectadas en un momento dado y específica de cada unidad instalada. Y la forma de asociarla con la letra de unidad es compleja y se basa en encontrar el número de serie, también en el registro en "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices" en los valores que comienzan por "\DosDevices\" para compararlo con el que también aparece en las cadenas de dispositivo USB (USB\Vid_XXXXXXX.....)

Cuando abrimos una unidad física lo primero que se lee es el MBR (Master Boot Record). En una unidad lógica obtendremos el BPB (BIOS Parameter Block ó BootSector de una partición). Alterar esos datos puede ser fatal si no sabemos lo que hacemos.

Desde el MBR podemos obtener el BMP y de éste acceder a los archivos manejando el sistema de archivos correspondiente, tal y como lo hace el S.O. pero no es fácil.

Estos enlaces pueden dar algo de luz al tema:
1. Trabajar con la FAT32 (o como vacunar un disco extraible)

2.
Trabajando con FAT16 y FAT32

En el segundo enlace encontrareis una aplicación escrita en C que gestiona los archivos de una unidad FAT16 ó FAT32 leyendo directamente del dispositivo extraíble el MBR el BPB la tabla de la FAT - Directorio raíz - directorios y archivos leidos cluster a cluster en bruto desde la unidad. Dicha aplicación es experimental y entre otras cosas sirva para extraer imágenes en bruto de dispositivos o restaurarlas. No es la última versión y se debe manejar con cuidado.

En definitiva ¿Que es lo que se quiere obtener de la conexión USB?


Espero haber aportado algo de luz al tema.



Saludos.
Responder Con Cita
  #18  
Antiguo 06-09-2012
Alan_B Alan_B is offline
Miembro
NULL
 
Registrado: ago 2012
Posts: 12
Poder: 0
Alan_B Va por buen camino
La cadena de cada telefono es el GUID que figura en Administrador de dispositivos/Seguramente en Modems/El equipo en si.... Propiedades/Detalles/ y ahi toda la info del aparatito... Yo tengo entendido que es necesario el GUID!!! Igual esta noche hago las pruebas para ver si funciona de la forma que me lo explico el amigo "ecfisa"!!! Cualquier avance o cambios en los errores seran posteados!

Última edición por Alan_B fecha: 06-09-2012 a las 17:19:53.
Responder Con Cita
  #19  
Antiguo 06-09-2012
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
amigos les cuento que tuve un resultado positivo en la prueba que hise con la pequena modificacion que nos mensiono el amigo escafandra \\.\PhysicalDriveX y el cambio a la funcion que hiso eficas aqui mi ejemplo

Código Delphi [-]
begin
 if USB.USBOpenDriver('\\.\PhysicalDrive0') then
    Memo1.Lines.Add('Conexion Hecha Correctamente')
    else
    Memo1.Lines.Add('Error en la conexion');
end;

esta prueba fue realizada con una memoria usb aun no e hecho la prueba con el celular pero es un avance este proyecto que nos interesa a todos

creo que una ves conectado el dipositivo las demas funciones de la libreria USB no deberian dar problemas

Última edición por kurono fecha: 06-09-2012 a las 20:01:59.
Responder Con Cita
  #20  
Antiguo 06-09-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola

Muchas gracias kurono y escafandra (que si iluminó más el tema).

Luego haré algunas pruebas, pero como pensaba del mismo modo que escafandra, nada que implique escritura hasta que no sepa bién lo que estoy haciendo. No está entre mis planes hacer detonar el celular .

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
ver los contactos de un celular con delphi kurono Varios 0 02-07-2011 00:01:21
No pongas el celular en el bolsillo del pantalon jcarteagaf La Taberna 4 25-07-2008 19:40:53
infectar un celular ciro.arc Seguridad 10 19-07-2008 18:00:36
Programación de un celular hugoChinchilla Conexión con bases de datos 7 14-09-2007 05:09:18
Y asi hay gente que se descresta con un celular mamcx La Taberna 3 14-03-2007 23:14:20


La franja horaria es GMT +2. Ahora son las 11:50:58.


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