Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como capturar el serial del disco duro en delphi (https://www.clubdelphi.com/foros/showthread.php?t=43650)

hperez 16-05-2007 23:59:38

Como capturar el serial del disco duro en delphi
 
Alguien me podria ayudar como capturar el serial del disco duro de mi pc con delphi 2006

seoane 17-05-2007 00:36:43

¿Revisaste la sección de trucos?

hperez 17-05-2007 01:29:46

Acabo de revisar algunos hilos y esta es la solucion mas practica

Código Delphi [-]
function GetVolumeID(DriveChar: Char): String;
 var
  MaxFileNameLength, VolFlags, SerNum: DWord;
 begin
  if GetVolumeInformation(PChar(DriveChar + ':\'), nil, 0,
     @SerNum, MaxFileNameLength, VolFlags, nil, 0)
  then
  begin
    Result := IntToHex(SerNum,20);
    Insert('-', Result, 5);
   // Result := IntToStr(SerNum);---si necesitan el decimal
  end
  else
      Result := '';
 end;
 procedure TFrmLogin.Button1Click(Sender: TObject);
 begin
    ShowMessage(GetVolumeID('C'));
 end;

MAXIUM 17-05-2007 02:52:27

¿ese es el de fabrica o el que se crea con cada format?

cHackAll 17-05-2007 03:06:25

Mmm...
 
Lastimosamente no recuerdo exactamente el otro, pero ése es el del Boot (generado al formatear)...

Neftali [Germán.Estévez] 17-05-2007 12:45:48

Revisa la sección de componentes de mi página. Hay uno que te permite obtener el número de Serie del Disco Duro (no el número de volumen -que es el que se borra al formatear-); Tengo unas modificaciones pendientes referentes a cuando hay más de una partición, pero funciona bien en el resto de casos. Cuando tenga un poco de tiempo de revisaré...

cHackAll 21-05-2007 20:50:40

Yo digo...
 
Acá les dejo la función que hice el '05 para obtener la serie de un HDD... La adecué un poco para que sea una función independiente pues yo lo uso luego del "InitExe". Es todo lo que se necesita y funciona a la perfección sin DLLs.
Código Delphi [-]
function GetSerial(Drive: Char): ShortString;
const InBuffer: array [0..7] of Cardinal = ($200,$10100,$ECB000,0,0,0,0,0);
var
 hDevice, Dummy: Cardinal;
 IdeInfo: array [0..$83] of Cardinal;
begin
 Result[0] := #0;
 hDevice := CreateFile(PChar('\\.\' + Drive + ':'), GENERIC_READ + GENERIC_WRITE, FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
 if hDevice <> INVALID_HANDLE_VALUE then
  begin
   DeviceIoControl(hDevice, $7C088, @InBuffer, SizeOf(InBuffer), @IdeInfo, SizeOf(IdeInfo), Dummy, nil);
   CloseHandle(hDevice);
   Result[0] := #20;
   Move(IdeInfo[9], Result[1], Byte(Result[0]));
  end;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
 Caption := '"'+GetSerial(ComboBox1.Text[1])+'"'; // 'a..z'
end;

La función no es aplicable en 9x, puesto que para ésos fines se debiese acceder a los puertos que manejan los buses (1F0h, 170h, 1E8h y 168h).
Personalmente mis aplicaciones solo corren en NT, lo decidí firmemente cuando me enteré que Microsoft ya no daba soporte a ésos SOs.

PD: Disculpen el retraso pero andaba "programando"


La franja horaria es GMT +2. Ahora son las 04:40:45.

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