Evento que lea la serie del disco

12/04/2007 - 18:00 por José A. Castrejón | Informe spam
Hola buenos dias a todos,

Hace algun tiempo lei sobre un evento que puede leer el numero de serie del
disco duro, creo que era para Access. ¿Este evento existira para Excel ?. La
verdad no recuerdo en donde lo encontre.

Saludos

Jose Antonio castrejón

Preguntas similare

Leer las respuestas

#6 David
13/04/2007 - 18:36 | Informe spam
Aparentemente, cuando utilizas "Win32_PhysicalMedia" obtienes el número de
serie asignado por el fabricante al disco duro físico. Cuando utilizas
"FileSystemObject", obtienes el número de serie asignado por el sistema a la
partición.

Si ejecutas el procedimiento que te dió Fernando en una PC con dos discos
duros físicos, obtendrás solamente dos números de serie:

Sub AveriguarNúmeroDeSerieDeDiscos()
Dim oWMI As Object, Discos As Object, Disco As Object
Set oWMI = GetObject("WINMGMTS:")
Set Discos = oWMI.instancesof("Win32_PhysicalMedia")

For Each Disco In Discos
MsgBox "Serie: " & Disco.serialnumber
Next


Set Disco = Nothing
Set Discos = Nothing
Set oWMI = Nothing
End Sub

En cambio, si ejecutas el siguiente procedimiento en la misma máquina (yo la
probé en una con dos discos duros y 3 particiones), obtendrás un número de
serie para cada unidad lógica:

Sub AnalizarDiscos()
On Error Resume Next
Dim Info, NumSerie As String
Dim FS As Object 'FileSystemObject
Dim DiscoDuro As Object 'Drive
Set FS = CreateObject("Scripting.FileSystemObject")
Set Discos = FS.drives
For Each Disco In Discos
Info = ""
If NumSerie <> Disco.SerialNumber Then
NumSerie = Disco.SerialNumber
Info = "Serie: " & NumSerie
End If
Info = Info & Chr(13) & " Drive " & Disco.DriveLetter
Info = Info & Chr(13) & " Tipo " & Disco.DriveType
Info = Info & Chr(13) & " Sistema de archivo " & Disco.FileSystem
MsgBox Info
Next Disco

Set FS = Nothing
End Sub

El asunto ahora será qué quieres identificar: la unidad física o la unidad
lógica...



"David" escribió:

¿Por qué dos resultados diferentes?

En verdad es curioso. Probé obtener la serie del disco con las dos clases,
y en efecto el resultado es distinto. No encuentro relación entre ellos.
Traté de buscar información, y encontré bastante, pero nada que resuelva esta
cuestión.

Yo siempre he utilizado FileSystemObject, y me ha dado buen resultado. Creo
que cualquiera de los dos métodos que utilices te será efectivo, en el
sentido que el número de serie retornado será un identificador único de la
unidad de disco, pero ahora me surge la inquietud: si se trata de la misma
propiedad, ¿por qué se obtienen resultados diferentes?

Bueno. Esperemos que alguien nos ayude a aclarar este dilema.

Mientras tanto, por si quieres leer un poco, aquí te dejo algunos enlaces.

Sobre cómo administrar Windows con WMI

http://www.microsoft.com/latam/tech...2k/mngwmi/

Específicamente sobre la clase "Win32_PhysicalMedia":

http://msdn2.microsoft.com/en-us/li...94346.aspx

Si quieres leer más sobre el objeto "FileSystemObject":

http://search.msdn.microsoft.com/se...&tab=0

Y un sitio interesante que te muestra información sobre "FileSystemObject"
en una forma un poco más didáctica:

http://www.henri-ruch.ch/ASP/objets...Object.asp

Por último, si te quieres bajar un ejemplo, visita este sitio y descarga el
ejemplo 8:

http://www.geocities.com/sdgm04/03-VBA.html

Espero que alguien nos heche una mano con esto.

Saludos a todos!



"José A. Castrejón" escribió:

> Gracias a los 2, sin embargo me queda una duda.
> Probe el codigo de Marco Barbosa y funciona muy bien y me arroja el numero :
> "1691898342"
> Tambien probe el codigo de Fernando Arroyo que tome de la liga que puso
> amablemente Abraham y me da un numero distinto !! este codigo me da el numero
> "3JV1K32T" ¿Cual es el correcto ? ¿Porque obtengo datos diferentes"
>
> A Continuación pongo el codigo de Fernando Arroyo
>
> Sub AveriguarNúmeroDeSerieDeDiscos()
> Dim oWMI As Object, Discos As Object, Disco As Object
> Set oWMI = GetObject("WINMGMTS:")
> Set Discos = oWMI.instancesof("Win32_PhysicalMedia")
>
> For Each Disco In Discos
> MsgBox "Serie: " & Disco.serialnumber
> Next
>
>
> Set Disco = Nothing
> Set Discos = Nothing
> Set oWMI = Nothing
> End Sub
>
> Saludos y gracias
>
>
> "José A. Castrejón" wrote:
>
> > Hola buenos dias a todos,
> >
> > Hace algun tiempo lei sobre un evento que puede leer el numero de serie del
> > disco duro, creo que era para Access. ¿Este evento existira para Excel ?. La
> > verdad no recuerdo en donde lo encontre.
> >
> > Saludos
> >
> > Jose Antonio castrejón
Respuesta Responder a este mensaje
#7 Héctor Miguel
14/04/2007 - 06:31 | Informe spam
hola, José !

... el codigo de Marco Barbosa... me arroja el numero: "1691898342"
... el codigo de Fernando Arroyo... me da un numero distinto... "3JV1K32T"
Cual es el correcto ? Porque obtengo datos diferentes" [...]



1) la informacion que necesitas la puedes encontrar en la MSDN / SDK [que por cierto... es mas amplia y basta que...] :D
visita como 'punto de arranque'... -> http://tinyurl.com/2mros [ademas de que existen bastantes sitios con llamadas a las API's] ;)
[ahi podras consultar/obtener/probar/... con otro tipo de propiedads para cada 'tipo' de informacion]
[probablemente] tambien encontraras la -posible- 'causa' de los errores, ya que los WMI 'requieren' Win_NT/2000/XP :-(
2) el serial que devuelve la funcion que utliza WMI [Windows Management Instrumentation] -al navegar por la info anterior veras que...-
ES el numero con el cual ->el fabricante<- ha 'etiquetado' [fisicamente] la unidad de almacenamiento [HD]
[es decir... es el unico y 'verdadero' numero de serie] :D
3) el serial que devuelve ->cualquier otro metodo/procedimiento/llamada/API/...'<- NO es 'permanente' -?-
[es decir... cambia por cada vez que la unidad de almacenamiento 'pasa' por un proceso de 'preparacion' ->se le da formato<-] :D
4) aunque se que sera mas que 'suficiente' informacion [NO la que te 'proveo' en este mensaje, sino la que existe en la MSDN/SDK] :))
haz unas pruebas con los siguientes codigos de ejemplo ;)

si cualquier duda... comentas?
saludos,
hector.
== en un modulo de codigo 'normal' ==Sub Unidad_Fisica()
' como 've' las unidades una pc con windows_NT/2000/XP como SO '
Dim Disco As Object
With GetObject("WinMgmts:")
For Each Disco In .InstancesOf("Win32_DiskDrive")
MsgBox "Serie decimal: " & Disco.Signature & vbCr & _
"Serie Hexadecimal: " & Hex(Disco.Signature) & vbCr & _
"Fabricante: " & Disco.Manufacturer & vbCr & _
"Tipo de medio: " & StrConv(Disco.MediaType, vbProperCase) & vbCr & _
"Modelo: " & Disco.Model & vbCr & _
"Nombre: " & Disco.Name & vbCr & _
"Identificador: " & Disco.Signature
Next
End With
End Sub
Sub Unidad_Logica()
' por cada unidad logica '
Dim Disco As Object
With GetObject("WinMgmts:")
For Each Disco In .InstancesOf("Win32_LogicalDisk")
MsgBox "Unidad disco: " & Disco.Name & vbCr & _
"Serie logica: " & Disco.VolumeSerialNumber
Next
End With
End Sub
Sub Medio_Fisico()
' la 'etiqueta' que le pone el fabricante =>NO cambia<= al re/formatear unidades '
Dim Disco As Object
With GetObject("WinMgmts:")
For Each Disco In .InstancesOf("Win32_PhysicalMedia")
MsgBox "Serie Fabrica: " & Application.Trim(Disco.SerialNumber)
Next
End With
End Sub
Sub NumeroDeSerie()
' mismo numero de serie que Win32_LogicalDisk '
With CreateObject("Scripting.FileSystemObject")
MsgBox .GetDrive(.GetDriveName("C:")).SerialNumber & vbCr & _
Hex(.Drives.Item("C:").SerialNumber)
End With
End Sub
Respuesta Responder a este mensaje
#8 Ivan
15/04/2007 - 19:18 | Informe spam
hola chicos, disculpad que me meta, pero el tema me interesa bastante, y me
ha surgido una duda

antes que nada gracias a todos por la cantidad de informacion y
procedimientos facilitados.

y ahora la duda, en concreto para Hector Miguel (o, mas bien sobre una de
sus propuestas). Se trata del procedimiento 'Medio_Fisico', que devuelve la
etiqueta puesta por el fabricante.

la cuestion es que en mi equipo devuelve un nº de serie, pero viendo el
bucle del codigo, y teniendo dos discos duros, pensaba que devolveria al
menos dos. Podrias/iais explicarme/nos el motivo. ¿que se considera
exactamente el 'medio fisico', para que en mi caso devuelva un solo nº de
serie?

bueno, disculpad la intromision, pero he pensado añadirlo para comprobar el
equipo del usuario y no querria arriesgarme a meter la pata.

en cualquier caso gracias por el hilo

Un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#9 Héctor Miguel
16/04/2007 - 04:25 | Informe spam
hola, Ivan !

... del procedimiento 'Medio_Fisico', que devuelve la etiqueta puesta por el fabricante.
... en mi equipo devuelve un nº de serie, pero viendo el bucle del codigo
... teniendo dos discos duros, pensaba que devolveria al menos dos.
... que se considera exactamente el 'medio fisico', para que en mi caso devuelva un solo nº de serie?..



[creo que] la siguiente direccion es un buen lugar para profundizar al respecto del tema en cuestion:
-> http://vbnet.mvps.org/code/wmi/win32_diskdrive.htm

y en cuanto tenga oportunidad de hacer pruebas en alguna pc con varios HD... regreso con comentarios :))

saludos,
hector.
Respuesta Responder a este mensaje
#10 Héctor Miguel
16/04/2007 - 04:41 | Informe spam
hola [de nuevo], Ivan !

con relacion a esta parte de tu consulta...

... que se considera exactamente el 'medio fisico', para que en mi caso devuelva un solo nº de serie?..





si obtienes solo UN numero de serie como 'medio_fisico' [probablemente]...
se deba a que tienes UN solo disco 'fisico' con una 'particion' -?-
lo que estaria generando dos unidades 'logicas' [C:> y D:>] sobre un solo 'medio fisico' [disco duro] -?-

los medios 'fisicos' son los que se conectan a la tarjeta madre [o placa base] a traves de los puertos [IDE, SCSI, etc.]

[solo por si las dudas] :))
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida