FoxPro/Visual FoxPro - Serial Number Hard Disk

   
Vista:

Serial Number Hard Disk

Publicado por Humberto (83 intervenciones) el 21/08/2008 05:36:28
Hola Chicos.
El otro día les consulte como obtener el Número de Serie del Disco Rígido. Gracias a Uds. lo pude obtener; pero me quedé con una duda.

Desde el Sistema Operativo MSDOS si yo digito:

C:>VOL me dice que el Nr. de Serie de Disco es ( 98D0-2E3C )

Y por el mecanismo que Uds. me enseñaron a sacar el número me da ( -1731187140 ).

Me sabrían decir ¿Porque son dos resultados distintos si se refieren al mismo Nro. de Serie?

Muchas Gracias por su atención.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Serial Number Hard Disk

Publicado por kong (681 intervenciones) el 21/08/2008 08:21:59
creo que el uno es decimal y el otro es hexadecimal.

chequealos asi:

?0x40F18F73

.............
le quitas la rayita del medio

............
el dilema esta cuando sale numero negativo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Serial Number Hard Disk

Publicado por Ernesto Hernandez (4632 intervenciones) el 21/08/2008 20:20:16
te envio algunas funciones para obtener y convertir los diferentes valores que obtengas del serial

Dimension aKnownDrives[1]
lnDrives = GetDriveStrings(@aKnownDrives)
If lnDrives > 0
Dimension aDriveInfo[3]
For ix = 1 to lnDrives
=GetVolInfo( aKnownDrives[ix], @aDriveInfo )
? "Drive : [" ;
+ aKnownDrives[ix] ;
+ "] Type : [" ;
+ cDriveType(aKnownDrives[ix]) ;
+ "] Volume Name : [" ;
+ aDriveInfo[1] ;
+ "] Sytem : [" ;
+ aDriveInfo[2] ;
+ "] Serial No : [" ;
+ aDriveInfo[3] +"]"
Endfor
Endif

Function cDriveType
Lparameters tcRoot && Root of drive ie: "c:"
Local array aDrvTypes[7]
aDrvTypes[1]="CANNOT_DETERMINE"
aDrvTypes[2]="INVALID_DRIVE"
aDrvTypes[3]="DRIVE_REMOVABLE"
aDrvTypes[4]="DRIVE_FIXED"
aDrvTypes[5]="DRIVE_REMOTE"
aDrvTypes[6]="DRIVE_CDROM"
aDrvTypes[7]="DRIVE_RAMDISK"
Return aDrvTypes[nDriveType(tcRoot)+1]

Function nDriveType
Lparameters tcRoot && Root of drive ie: "c:"
Declare integer GetDriveType in WIN32API string @cDrvLetter
Return GetDriveType(@tcRoot)

Function GetVolInfo
Lparameters lcRoot, taInfo && Root of drive ie: "c:", InfoArray passed by ref
Declare SHORT GetVolumeInformation IN Win32API;
STRING @lpRootPathName, STRING @lpVolumeNameBuffer,;
INTEGER nVolumeNameSize, INTEGER @lpVolumeSerialNumber,;
INTEGER @lpMaximumComponentLength, INTEGER @lpFileSystemFlags,;
STRING @lpFileSystemNameBuffer, INTEGER nFileSystemNameSize
Store 0 TO lnserialno, lncomplen, lnsysflags
Store SPACE(260) TO lcvolname, lcsysname
Store LEN(lcvolname) TO lnvolsize, lnnamesize
If (GetVolumeInformation(@lcRoot, @lcvolname,;
lnvolsize, @lnserialno, @lncomplen, @lnsysflags,;
@lcsysname, lnnamesize) # 0)
Dimension taInfo[3]
taInfo[1] = substr(lcvolname, 1, at(chr(0),lcvolname)-1) && Volume name
taInfo[2] = substr(lcsysname, 1, at(chr(0),lcsysname)-1) && System
taInfo[3] = dec2hex(lnserialno) && Serial in hex format
Else
taInfo = ""
Endif
Return

Function GetDriveStrings
Parameters aDriveStrings && Array passed by ref
Local lpBuffer, nBufferLength, lnBuflen, lnDriveCount, ix
Declare integer GetLogicalDriveStrings in Win32API ;
integer nBufferLength, string @ lpBuffer
lpBuffer = space(26*128)
nBufferLength = 26*128
lnBuflen = GetLogicalDriveStrings(nBufferLength, @lpBuffer)
If lnBuflen # 0 && Succeeded
lpBuffer = left(lpBuffer,lnBuflen)
lnDriveCount = occurs(chr(0),lpBuffer)
Dimension aDriveStrings[lnDriveCount]
For ix = 1 to lnDriveCount
aDriveStrings[ix] = ;
substr(lpBuffer, ;
iif( ix=1,1,at(chr(0),lpBuffer,ix-1)+1 ), ;
at(chr(0),lpBuffer,ix) ;
- iif( ix=1,0,at(chr(0),lpBuffer,ix-1)) - 1)
Endfor
Else
lnDriveCount = 0
Endif
Return lnDriveCount

Function dec2hex
Parameter nDecimal, nDigits
** Converts from base 10 to base 16. Returns Hex notation in a string whose length
** is always a multiple of 2, unless the nDigits parameter is specified to pad the
** string with zeroes.
cHex = ""
Do WHILE nDecimal >= 16
cHex = hexdigit(nDecimal % 16) + cHex
nDecimal = int(nDecimal/16)
Enddo
cHex = hexdigit(nDecimal) + cHex
Return PADL(cHex, ;
iif( PARAMETERS() < 2, ;
ceiling(len(cHex)/2)*2, nDigits ), "0")

Function hexdigit
Parameters nDecimal
Return iif(nDecimal>9,chr(asc("A")+nDecimal%10),str(nDecimal,1))




Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Serial Number Hard Disk

Publicado por Humberto (83 intervenciones) el 21/08/2008 20:31:44
Guau! Ernesto

Te agradezco de todo corazón por la molestia que te tomaste. Ya lo pegue en un .PRG para analizar y aprender; Segurisimo algo más. Desde Argentina un Gran Abrazo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Serial Number Hard Disk

Publicado por Ernesto Hernandez (4632 intervenciones) el 22/08/2008 00:24:24
gracias .. por el abrazo ... y estamos para servirte compañero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Serial Number Hard Disk

Publicado por Ernesto Hernandez (4632 intervenciones) el 22/08/2008 00:24:24
gracias .. por el abrazo ... y estamos para servirte compañero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar