La Web del Programador: Comunidad de Programadores
 
    Pregunta:  46 - LEER EL NUMERO DE SERIE DE UN DISCO
Autor:  Jorge
Quisiera saber como lo puedo hacer para que en Visual Basic (Preferente) 5 o en C para Windows (cualquier versión) pueda leer el numero de serie de un disco sin que el usuario se de cuenta, o sea sin tener que salir a MS-DOS o ejecutar el comando DIR.
Necesito ayuda.

  Respuesta:  Hernaldo Alvarez
La función que se usa es: GetVolumeInformation
El ejemplo es un Form con una caja de texto en la que se introduce la unidad (directorio raíz, realmente), de la que queremos mostrar la información.
Ver resp46.txt

  Respuesta:  Daniel
La respuesta te la ha dado Hernaldo Alvarez, pero en algunas ocasiones y con la versión 5 de VBasic, cuando lees la unidad C:, te devuelve como número de serie el 0, por lo que no te asustes

  Respuesta:  Enric
En un .bas introduce la llamada a la libreria siguiente:
Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
En el form introduce el siguiente codigo:
NVolSize = 0: NVolNumber = 0: NMaxCompLength = 0
NFileSFlags = 0: NFileSBuffer = 0: NFileSNames = 0
Ruta = UCase(Left(Ruta, 1)) & ":\"
ChDrive Ruta
Nombre = Dir(Ruta, vbVolume)

ret = GetVolumeInformation(Ruta, Nombre, NVolSize, NVolNumber, NMaxCompLength, NFileSFlags, NFileSBuffer, NFileSNames)

If ret = 0 Then Label1.Caption = "Numero de Serie del Volumen : " & Left(Hex(NVolNumber), 4) & "-" & Right(Hex(NVolNumber), 4) & vbCrLf & "Nombre del Volumen : " & Nombre


  Respuesta:  Emanuel Areias
Lidié con ese asunto y lo resolví definitivamente de una manera "primitiva", ya que las funciones de la API o de VB me devolvían 0 (cero) varias veces.
Hice un pequeño programita en Clipper, que ejecuta el comando DIR del DOS y envía el resultado a un archivo de texto, después extraigo de allí el codiciado número de serie del disco.
No tuve más problemas, y es una función que uso en todos mis programas.