PDA

Ver la Versión Completa : Serial del disco duro


Emerson
18-06-2006, 02:59:34
Estoy trabajando en delphi y necesito saber si existe alguna posiblidad de verificar el codigo serial del disco duro.. Gracias.... a todos

Sotrono
18-06-2006, 05:36:45
Hola, antes te recomiendo que leas la guia de estilo (http://www.clubdelphi.com/foros/guiaestilo.php). Este foro no es el mas adecuado para este hilo.

Chequea esto:


//Truco 46 de Trucomania
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,8);
Insert('-', Result, 5);
end
else
Result := '';
end;


Ejemplo de llamada:


ShowMessage(GetVolumeId('c'));


Igualmente, si utilizas el buscador vas a encontrar varios hilos en los que ya se respondio esto, en ésta misma página (abajo de todo) hay links a hilos similares.

Saludos y bienvenido a Club Delphi!!

Mick
18-06-2006, 12:10:04
Solo comentar que esa funcion devuelve el identificador de una particion, no del disco, de modo que si la particion se formatea el numero de serie cambia aunque sea el mismo disco duro. De modo que no sirve para ser utilizado como sistema anticopia.

Saludos

turminator
18-06-2006, 23:21:01
Una pregunta, yo veo todo este codigo y me dan ganas de probar como funciona pero cuanto abro mi Delphi 7, creo un form con un boton y le doy la opcion que al cliquear ocurra: ShowMessage(GetVolumeId('c')); No me muestra la ID del disco duro. Donde debo meter el codigo restante?

//Truco 46 de Trucomaniafunction 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,8); Insert('-', Result, 5); end else Result := ''; end;

Sotrono
19-06-2006, 03:06:12
No me muestra la ID del disco duro. Donde debo meter el codigo restante?
En la sección Implementation.

Neftali [Germán.Estévez]
19-06-2006, 09:50:28
En la sección de componentes de mi página (http://neftali.clubdelphi.com/delphi_componentes.html) hay uno llamado TDiskInfo que te permite obtener el número de Serie del disco duro (no el volumen) a parte de mucha otra información.

turminator
19-06-2006, 13:09:11
En la sección Implementation.

Muchas gracias Sotrono. Algo tan básico como esto, no sabia como funcionaba. A partir de ahora puedo ir viendo todos los ejemplos de codigos y probarlos para aprender. Muchas gracias.

PD: La sección de trucos que hay, tambien debo introducir el codigo en la sección IMPLEMENTATION?

Gracias

Sotrono
19-06-2006, 17:29:18
La sección de trucos que hay, tambien debo introducir el codigo en la sección IMPLEMENTATION?
La implementación de la función (el código mismo) va en la sección Implementation, pero a veces tambien hay que declararla (solo el encabezado), por ejemplo, en la sección Private o Public de la unidad del Form.
Chequea este hilo.

German
08-07-2006, 08:24:40
En la sección de componentes de mi página (http://neftali.clubdelphi.com/delphi_componentes.html) hay uno llamado TDiskInfo que te permite obtener el número de Serie del disco duro (no el volumen) a parte de mucha otra información.

Un pequeño apunte sobre la demo incluida en el componente: El gráfico muestra al revés el espacio ocupado y libre.

Y otro sobre el componente (pequeño también): Solo comentar que, para obtener la propiedad "SerialNumber", es necesario incluir una librería de la carpeta DEMO en la misma carpeta que el ejecutable que use el componente. Además, se debe añadir "ShareMem" en la cláusula "uses" del form que utilice el componente, o en la "uses" del proyecto, si es que van a utilizarlo varios forms. Si no se incluye, lanza una excepción de lectura de memoria (BDS 2006). Esta información no aparece en la ayuda (o al menos no la he visto).

Salu2.

Neftali [Germán.Estévez]
10-07-2006, 09:47:35
(1) El gráfico muestra al revés el espacio ocupado y libre.
(2) Y otro sobre el componente (pequeño también): Solo comentar que, para obtener la propiedad "SerialNumber", es necesario incluir una librería de la carpeta DEMO en la misma carpeta que el ejecutable que use el componente. Además, se debe añadir "ShareMem" en la cláusula "uses"

Gracias por ambos comentarios; Corregiré la demo y añadiré lo que comentas al fchero de documentación.

German
12-07-2006, 07:44:30
Un comentario mas... :rolleyes:

Al utilizar "ShareMem" también es necesario incluir la librería "borlndmm.dll" en la carpeta del ejecutable, a no ser que el PC tenga instalado Delphi, en cuyo caso no es necesario, ya que esta librería está incluida en la carpeta "Bin", y está registrada en Windows.

¿No seria mas fácil incluir la función que devuelve el número de serie del HD en un dcu...? (tan solo es una reflexión).

Salu2.