Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   GetVolumeInformation (https://www.clubdelphi.com/foros/showthread.php?t=5876)

ogorut 09-12-2003 12:17:24

GetVolumeInformation
 
Buenas a todos.
Estoy intentando poder sacar el número de serie de un disco duro de una unidad de red. Con la función GetVolumeInformation consigo obtenerla, pero no me funciona con W95, 98, Me.
Alguien sabe de alguna función o manera de poder sacarlo??

delphi.com.ar 09-12-2003 15:58:07

Según la documentación, esta función tendría que funcionar en todos los Win9x.... ¿Cómo la estas utilizando?

ogorut 11-12-2003 08:37:46

Para hacer una prueba creo la siguiente funcion:

function TForm1.GetVolumeSerialNumber(const drive: TFilename): DWord;
var
VolumeName, FileSystemName: array[0..MAX_PATH-1] of char;
VolumeSerialNumber, MaxFilenameLength, FileSystemFlags: DWord;
begin
GetVolumeInformation(PChar(drive),
VolumeName, MAX_PATH, @VolumeSerialNumber, MaxFilenameLength,
FileSystemFlags, FileSystemName, MAX_PATH);
Result := VolumeSerialNumber;
end;

En la documentación que he encontrado dice que funciona en plataforma win9x pero yo no lo consigo. Esta misma función en plataforma NT si funciona. Me refiero a obtener el número de serie de un disco duro de un equipo en red.

GetVolumeSerialNumber('c:\') si funciona pero no funciona si mapeo una unidad de red. En la documentación dice que hay que poner lo siguiente:

GetVolumeSerialNumber('\\servidor\carpeta\') o
GetVolumeSerialNumber('W') donde W es la unidad de red mapeada. Pero...a mi desde luego no me funciona, siempre me devuelve un 0(cero).

A ver si con esta explicación alguien me puede ayudar.

delphi.com.ar 11-12-2003 15:37:40

Esto me ha funcionado en un Win98:
Código:

function GetVolumeSerialNumber(const ADrive: TFilename):  DWord;
var
  MaxCompLen,
  FileSysFlags : Cardinal;
begin
  Result := 0;
  GetVolumeInformation(PChar(ADrive), nil, 0, @Result, MaxCompLen, FileSysFlags, nil, 0);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  // La unidad mapeada es F
  Caption := IntToStr(GetVolumeSerialNumber('F'));
end;

Saludos!

ogorut 12-12-2003 10:24:54

Bueno, he probado en Delphi 3 y 5, pero no funciona correctamente.
Una prueba que he hecho es en el equipo 1 hago un GetVolumeSerialNumber('C:\').
En el equipo 2 mapeo la unidad C:\ del equipo 1 (F por ejemplo) y hago en el equipo 2 GetVolumeSerialNumber('F') y no me dan valores iguales. Con lo cual no funciona.
Creo que se entiende bien. Esto me esta volviendo un poco loco.


Gracias Delphi.com.ar.

delphi.com.ar 12-12-2003 15:03:46

Evidentemente no funciona, te recomendaría que busques en el MSDN si es posible hacer esto desde un Win9x... fíjate que he modificado la funcion, y de este modo retorna siempre 0.

Saludos!

Néstor 18-06-2004 09:12:31

GetVolumeInformacion en Red
 
Hola
Por lo que he podido leer en este foro y por lo que he probado en mi programa,
GetVolumeInofrmacion no funciona cuando se trata de una unidad de red.
¿Alguién puede indicarme como podría obtener esta información? Si no existe posiblilidad, ¿Se puede optener el número de serie de la placa base de un equipo en red?

Gracias por vuestra ayuda.


La franja horaria es GMT +2. Ahora son las 14:10:16.

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