Serial del disco duro

14/08/2007 - 00:40 por Henry Sanchez | Informe spam
Hola grupo,

Desde hace mas de 2 años utilizo el siguiente codigo para encontrar el
serial del disco duro de un computador:

Public Function SerialDisco() As String
' Esta es la funcion que devuelve el serial del disco duro unico, asignado
por el fabricante
' Funciona en Windows 2000, NT y XP (Produce error en Me)
Dim OWMI As Object
Dim Disco As Object
Dim Discos As Object
On Error GoTo ErrorSerial

Set OWMI = GetObject("WINMGMTS:")
Set Discos = OWMI.instancesof("Win32_physicalMedia")
For Each Disco In Discos
SerialDisco = Disco.serialnumber
Exit For
Next Disco

Exit Function

ErrorSerial:
SerialDisco = "Error"
End Function

Este codigo lo tengo gracias a la ayuda de Hector Miguel, y aunque nunca lo
entendi muy bien, ultimamente me esta fallando pues devuelve "Error", supongo
que tiene que ver con el uso de Windows Vista o de Office 2007 (o tal vez
ambos), pues hace 2 años no molestaba

Alguien puede decirme que es lo que pasa con la linea

SerialDisco = Disco.serialnumber
que esta devolviendo error en un porcentaje muy alto de los equipos en los
que corro el codigo?
o mejor alguien puede pasarme una funcion que calcule el serial del disco
duro en donde se encuentra el archivo que contiene el codigo?

Saludos,

Henry

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
14/08/2007 - 08:38 | Informe spam
hola, Henry !

Desde hace mas de 2 a#os utilizo el siguiente codigo para encontrar el serial del disco duro de un computador:
... aunque nunca lo entendi muy bien, ultimamente me esta fallando pues devuelve "Error"
supongo que tiene que ver con el uso de Windows Vista o de Office 2007 (o tal vez ambos), pues hace 2 a#os no molestaba
Alguien puede decirme que es lo que pasa con la linea
SerialDisco = Disco.serialnumber
que esta devolviendo error en un porcentaje muy alto de los equipos en los que corro el codigo?
o mejor alguien puede pasarme una funcion que calcule el serial del disco duro en donde se encuentra el archivo que contiene el codigo?



1) segun el siguiente articulo, la propuesta del codigo original no deberia de fallar -???-
http://msdn2.microsoft.com/en-us/li...94346.aspx

2) *hablando* de windows vista, y que en el bucle del codigo *sales* inmediatamente despues de *leer* el primer disco *encontrado*
existe la posibilidad de un fallo en el *secuenciador* [o enumerador/identificador/...] de los medios fisicos en el vista -?-
-> http://support.microsoft.com/kb/937251/en

3) tambien existe la posibilidad de que se deba a politicas de seguridad de windows vista -?-
-> http://www.microsoft.com/industry/g...urity.mspx

4) otras fuentes de informacion...
-> http://msdn2.microsoft.com/en-us/li...64920.aspx

5) con relacion a *identificar* el disco desde el cual se corre tu archivo/aplicacion...
si la intencion es continuar *leyendo* el codigo [unico e inamovible] que pone el fabricante del disco...
no encontre en las propiedades del objeto *physicalMedia* [primer enlace]
-> alguna que permita identificar [p.e.] la unidad *logica* del medio fisico [p.e. "C:\"] :-((

6) [creo que] va a ser necesario/conveniente/... que hagas la consulta en los grupos de windows-vista -?-
y si te la aclaran... [plis] no dejes de regresar con la/s propuesta/s de solucion :D

si cualquier duda... comentas ?
saludos,
hector.

__ el codigo expuesto __
Public Function SerialDisco() As String
' Esta es la funcion que devuelve el serial del disco duro unico, asignado por el fabricante
' Funciona en Windows 2000, NT y XP (Produce error en Me)
Dim OWMI As Object
Dim Disco As Object
Dim Discos As Object
On Error GoTo ErrorSerial
Set OWMI = GetObject("WINMGMTS:")
Set Discos = OWMI.instancesof("Win32_physicalMedia")
For Each Disco In Discos
SerialDisco = Disco.serialnumber
Exit For
Next Disco
Exit Function
ErrorSerial:
SerialDisco = "Error"
End Function
Respuesta Responder a este mensaje
#2 Henry Sanchez
14/08/2007 - 19:16 | Informe spam
Gracias por tu respuesta Hector, voy a investigar un poco mas a fondo, sin
embargo haces una observacion importante: El codigo sale del bucle una vez
encuentra el primer disco, que no necesariamente es el que se busca.
Podrias sugerirme como mejorar el codigo para que abandone el bucle una vez
halla detectado el disco que contiene el archivo que se esta ejcutando?

Por otra parte, la razon de ser de todo esto es la de darle seguridad a mis
aplicaciones, de forma que solo corran en los equipos en los cuales yo las he
instalado.
Alguien tiene una solucion diferente a leer el serial del disco duro?

Si es asi, podria ayudarme con alguna sugerencia?

Saludos y nuevamente gracias.

Henry

"Héctor Miguel" wrote:

hola, Henry !

> Desde hace mas de 2 a#os utilizo el siguiente codigo para encontrar el serial del disco duro de un computador:
> ... aunque nunca lo entendi muy bien, ultimamente me esta fallando pues devuelve "Error"
> supongo que tiene que ver con el uso de Windows Vista o de Office 2007 (o tal vez ambos), pues hace 2 a#os no molestaba
> Alguien puede decirme que es lo que pasa con la linea
> SerialDisco = Disco.serialnumber
> que esta devolviendo error en un porcentaje muy alto de los equipos en los que corro el codigo?
> o mejor alguien puede pasarme una funcion que calcule el serial del disco duro en donde se encuentra el archivo que contiene el codigo?

1) segun el siguiente articulo, la propuesta del codigo original no deberia de fallar -???-
http://msdn2.microsoft.com/en-us/li...94346.aspx

2) *hablando* de windows vista, y que en el bucle del codigo *sales* inmediatamente despues de *leer* el primer disco *encontrado*
existe la posibilidad de un fallo en el *secuenciador* [o enumerador/identificador/...] de los medios fisicos en el vista -?-
-> http://support.microsoft.com/kb/937251/en

3) tambien existe la posibilidad de que se deba a politicas de seguridad de windows vista -?-
-> http://www.microsoft.com/industry/g...urity.mspx

4) otras fuentes de informacion...
-> http://msdn2.microsoft.com/en-us/li...64920.aspx

5) con relacion a *identificar* el disco desde el cual se corre tu archivo/aplicacion...
si la intencion es continuar *leyendo* el codigo [unico e inamovible] que pone el fabricante del disco...
no encontre en las propiedades del objeto *physicalMedia* [primer enlace]
-> alguna que permita identificar [p.e.] la unidad *logica* del medio fisico [p.e. "C:\"] :-((

6) [creo que] va a ser necesario/conveniente/... que hagas la consulta en los grupos de windows-vista -?-
y si te la aclaran... [plis] no dejes de regresar con la/s propuesta/s de solucion :D

si cualquier duda... comentas ?
saludos,
hector.

__ el codigo expuesto __
> Public Function SerialDisco() As String
> ' Esta es la funcion que devuelve el serial del disco duro unico, asignado por el fabricante
> ' Funciona en Windows 2000, NT y XP (Produce error en Me)
> Dim OWMI As Object
> Dim Disco As Object
> Dim Discos As Object
> On Error GoTo ErrorSerial
> Set OWMI = GetObject("WINMGMTS:")
> Set Discos = OWMI.instancesof("Win32_physicalMedia")
> For Each Disco In Discos
> SerialDisco = Disco.serialnumber
> Exit For
> Next Disco
> Exit Function
> ErrorSerial:
> SerialDisco = "Error"
> End Function



Respuesta Responder a este mensaje
#3 Pablov
15/08/2007 - 00:16 | Informe spam
Si quieres te puedo decir como leer el numero serial del PROCESADOR.

De todas formas si no quieres el primer disco, comenta la linea donde dice

exit for





Otro consejo, es que no lo hagas con una funcion, sino con una sub.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida