martes, 20 de enero de 2015

VBA: Obtener el número de serie de un disco duro (o partición).

Quizá no le veas el sentido a la siguiente entrada, y puedas preguntarte para qué me puede servir conocer cuál es el número de serie de un disco duro (o partición).

Una posible utilidad es proteger tu libro de trabajo para que sólo pueda ser abierto desde tu equipo.. es decir, además de incorporar una contraseña al fichero, o añadir un procedimiento que pida usuario y contraseña, podríamos emplear este Número de Serie de tu disco duro como control de acceso.
Seguridad al cuadrado!!


Para ello necesitaremos la propiedad .SerialNumber que nos indica precisamente lo que neceistamos, nos devuelve el número de serie decimal que se utiliza para identificar de forma única un volumen de disco.

Para comprobar que lo que obtenemos con esta function es cierto, podemos acceder al botón de Inicio de Windows, y luego haremos clic en el cuadro de "Búsqueda", donde escribiremos 'cmd'.

VBA: Obtener el número de serie de un disco duro (o partición).



A continuación, en la ventana del Símbolo de sistema (o ventana de MS-DOS), escribe:
vol c:
o vol la unidad de la que quieras conocer el Número de Serie..

VBA: Obtener el número de serie de un disco duro (o partición).



En mi caso, el número de serie de la unidad C: es: 14AD E4A0

Ahoara, para comprobarlo, insertaremos el siguiente código de un procedimiento Function en un módulo general:

Function NumeroSerieUnidad(Optional ByVal LetraUnidad As String) As String
'Nota importante: Se recomienda activar la referencia de la librería 'Microsoft Scripting Runtime'
'Con esta función conseguimos el número de serie del disco duro (partición).
'Este Número de serie lo genera Windows al formatear la partición
Dim fso As Object, Drv As Object
Dim SerieUnidadDec As Long

Application.Volatile
'Creamos un objeto FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")

'Asigamos la Letra de Unidad actual en caso de no especificarla en el argumento
If LetraUnidad <> "" Then
    Set Drv = fso.GetDrive(LetraUnidad)
Else
    Set Drv = fso.GetDrive(fso.GetDriveName(App.Path))
End If

With Drv
    'Devuelve True si la unidad especificada está preparada y False si no lo está.
    If .IsReady Then
        'SerialNumber Devuelve el número de serie decimal
        'que se utiliza para identificar de forma única un volumen de disco.
        SerieUnidadDec = Abs(.SerialNumber)
    Else
        SerieUnidadDec = -1
    End If
End With

'convertimos en Hexadecimal
SerieUnidadHex = Application.WorksheetFunction.Dec2Hex(SerieUnidadDec)

'Devovemos valor con la función
NumeroSerieUnidad = SerieUnidadHex
    
'Limpiamos las variables
Set Drv = Nothing
Set fso = Nothing
End Function



Si ejecutamos nuestra función en la hoja de cálculo, comprobamos que todo coincide...:

VBA: Obtener el número de serie de un disco duro (o partición).

No hay comentarios:

Publicar un comentario en la entrada