Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-04-2009
jagjag jagjag is offline
Registrado
 
Registrado: nov 2006
Posts: 7
Poder: 0
jagjag Va por buen camino
Obtener el ID hardware (No. de serie) de la memoria USB

Hola a todos y gracias por la ayuda que me puedan proporcionar.

Les quiero preguntar si alguien de ustedes sabe como obtener el ID hardware de las memorias USB.

Se que es con alguna api de Windows, pero no se cual ni como se haria esto.

En los sistemas oprativos como Windows XP o Vista, si uno ve en el administrador de dispositivos, en Controladoras de Bus Serie Universal, nos aparece Dispositivo de Almacenamiento USB (o sea la memoria USB), al darle chick derecho en propiedades, e irnos a DETALLES, en Propiedad si seleccionamos el ID de Hardware nos aparece el ID de fabrica de la memoria USB, quiero saber la manera de poderlo obtener mediante una forma en delphi 6.
Ya me di muchas vueltas en los foros pero no aparece nada de esto que requiero.

Espero sus respuestas y gracias por su amabilidad y atencion
Responder Con Cita
  #2  
Antiguo 18-04-2009
Mav Mav is offline
Miembro
 
Registrado: jun 2007
Posts: 39
Poder: 0
Mav Va por buen camino
Wink Id de hardware

Puede que te sirva esto:
Código Delphi [-]
var
query:array[0..11] of byte = (00, 00, 00, 00, 00, 00, 00, 00, 00, 08, 00, 00);
type
 Storage_Bus_Type = ( BusTypeUnknown, BusTypeScsi, BusTypeAtapi, BusTypeAta,
                     BusType1394, BusTypeSsa, BusTypeFibre, BusTypeUsb, BusTypeRAID );

type
PSTORAGE_DEVICE_DESCRIPTOR=record
Version:dword;
Size:dword;
DeviceType:UCHAR;
DeviceTypeModifier:UCHAR;
RemovableMedia:BOOLEAN;
CommandQueueing:BOOLEAN;
VendorIdOffset:dword;
ProductIdOffset:dword;
ProductRevisionOffset:dword;
SerialNumberOffset:dword;
BusType:STORAGE_BUS_TYPE;
RawPropertiesLength:dword;
RawDeviceProperties:array[1..500]of CHAR;
end;

function getValue(buf:PSTORAGE_DEVICE_DESCRIPTOR;offs:dword  ):string;
var
mas:array[0..255] of char;
begin
if offs=0 then exit;
asm
push eax
push ebx
push edx
push esi
push edi
xor edi,edi
xor esi,esi
mov esi,offs
lea edx,buf
lea ebx,mas
@m1:
mov al,[edx+esi]
mov [ebx+edi],al
inc edi
inc esi
cmp al,0
jne @m1
pop edi
pop esi
pop edx
pop ebx
pop eax
end;
result:=string(mas);
end;

function NUM(s:string):boolean;
begin
result:=true;
case s[1] of
'0'..'9','A'..'F','a'..'f':;
else result:=false;
end;
case s[2] of
'0'..'9','A'..'F','a'..'f':;
else result:=false;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
hDevice:THANDLE;
status:BOOLean;
returnedLength:ULONG;
devDescSTORAGE_DEVICE_DESCRIPTOR;
s,ss:string;
c:char;
x,y:integer;
begin
stringgrid1.Rows[stringgrid1.RowCount].Clear;
stringgrid1.Cells[0,0]:='Disk';
stringgrid1.Cells[1,0]:='VendorId';
stringgrid1.Cells[2,0]:='ProductId';
stringgrid1.Cells[3,0]:='ProductRev';
stringgrid1.Cells[4,0]:='Accommodation';
stringgrid1.Cells[5,0]:='SerialNumber';
x:=1;
for c:='A' to 'Z' do begin
hDevice:=CreateFile(pansichar('\\.\'+c+':'), GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
status:=DeviceIoControl( hDevice, $002d1400, @query, sizeof(query), @devDesc, 512, cardinal(returnedLength), nil );
if status then
 begin
   stringgrid1.Cells[0,x]:=c;
//   if (devDesc.RemovableMedia) then memo1.Lines.Add('Removable Media');
   stringgrid1.Cells[1,x]:=getValue(devDesc,devDesc.VendorIdOffset);
   stringgrid1.Cells[2,x]:=getValue(devDesc,devDesc.ProductIdOffset);
   stringgrid1.Cells[3,x]:=getValue(devDesc,devDesc.ProductRevisionOffset);  
   case devDesc.BusType of
     BusTypeUnknown:s:='Unknown';
     BusTypeScsi:s:='SCSI';
     BusTypeAtapi:s:='ATAPI';
     BusTypeAta:s:='ATA';
     BusType1394:s:='IEEE 1394';
     BusTypeSsa:s:='SSA';
     BusTypeFibre:s:='FIBRE';
     BusTypeUsb:s:='USB';
     BusTypeRAID:s:='RAID';
    end;
   stringgrid1.Cells[4,x]:=s;
   ss:=getValue(devDesc,devDesc.SerialNumberOffset);
   s:='';
   for y:=1 to length(ss) div 2 do
    begin
    if not NUM(copy(ss,y*2-1,2)) then break;
    s:=s+chr(strtoint('$'+copy(ss,y*2-1,2)));
    end;
   stringgrid1.Cells[5,x]:=s;
   inc(x);
  end;
end;
end;

end.
Saludos..
Responder Con Cita
  #3  
Antiguo 20-04-2009
Khronos Khronos is offline
Miembro
 
Registrado: abr 2007
Posts: 298
Poder: 18
Khronos Va por buen camino
Creo que la API GetVolumeInformation te servira.

Saludos.
Responder Con Cita
  #4  
Antiguo 20-04-2009
Avatar de Chogo
Chogo Chogo is offline
Miembro
 
Registrado: may 2005
Ubicación: Pto Cortes,Honduras,C.A.
Posts: 148
Poder: 19
Chogo Va por buen camino
¿no se pierde el id al formatear la usB?.
Responder Con Cita
  #5  
Antiguo 20-04-2009
jagjag jagjag is offline
Registrado
 
Registrado: nov 2006
Posts: 7
Poder: 0
jagjag Va por buen camino
Gracias Mav

Muchas gracias por tu respuesta, pero no me da la informacion que requiero, sigue sin darme el ID Hardware de la memoria USB.

Sigo investigando y espero que me puedan hechar la mano.
Gracias a Todos
Responder Con Cita
  #6  
Antiguo 20-04-2009
jagjag jagjag is offline
Registrado
 
Registrado: nov 2006
Posts: 7
Poder: 0
jagjag Va por buen camino
Ya tambien vi lo del volumen

Ya revise tambien otro que es el api para obtener el volumen de la usb, pero no me sirve por que si se formatea la memoria se pierde el volumen.

Necesito el numero de hardware que aunque se formatee la unidad este numero no se pierda
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
Obtener una lista del hardware instalado vroa74 API de Windows 0 16-05-2008 17:53:15
Numero de Serie de memoria USB carlocf Varios 2 03-03-2008 17:40:00
Como obtener datos del hardware (RAM, MB, Video) JoAnCa API de Windows 4 22-10-2007 22:30:44
obtener el hardware instalado droguerman OOP 1 14-05-2007 18:01:58
Obtener Hardware Instalado diegofhernando Varios 4 09-03-2004 20:28:36


La franja horaria es GMT +2. Ahora son las 18:58:22.


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