Página 1 de 1
HDSerial
Publicado: Sab Jul 01, 2006 3:08 am
por zeasoftware
Revisando algunos foros encontre esta funcion de como leer la serie de disco
duro, esta en FW y C, y C no es mi fuerte que digamos, y aun lo estoy
analizando para adaptarlo.
Lo anexo si alguien tiene conocimientos avanzados y nos apoya a muchos.
Gracias.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
Attached files Hdserial.c (1.7 KB)Â HDSerial.prg (506 B)Â
HDSerial
Publicado: Sab Jul 01, 2006 7:45 pm
por jfgimenez
Ramón,
> Revisando algunos foros encontre esta funcion de como leer la serie de
> disco duro, esta en FW y C, y C no es mi fuerte que digamos, y aun lo
> estoy analizando para adaptarlo.
>
> Lo anexo si alguien tiene conocimientos avanzados y nos apoya a muchos.
Es mucho más sencilo así:
//---------------------------------------------------------- ----------------
#pragma BEGINDUMP
#include "windows.h"
#include "xailer.h"
XA_FUNC( GETVOLUMESERIAL )
{
DWORD nSerial = 0;
GetVolumeInformation( hb_parc( 1 ), NULL, 0, &nSerial, NULL, NULL,
NULL, 0 );
hb_retnl( nSerial );
}
#pragma ENDDUMP
//---------------------------------------------------------- ----------------
Y la llamas así:
MsgInfo( GetVolumeSerial( "C:" ) )
--
Un saludo,
José F. Giménez
http://www.xailer.com
HDSerial
Publicado: Sab Jul 01, 2006 9:34 pm
por jlalin
Ramón,
> que estoy haciendo mal?
hazlo así: L2Hex( vol )
Saludos,
José Lalín
HDSerial
Publicado: Sab Jul 01, 2006 10:07 pm
por jlalin
Ramón,
> perfecto pero.... el hextoString() aun me devuelve ",,{--"
> ya que requiero el valor en Decimal.
La respuesta está en tu pregunta. La función te está devolviendo el
valor en decimal (un LONG) y estás intentando pasarlo a HexToString como
si fuera hexadecimal.
Si usas HexToString( L2Hex( vol ) ), también debe funcionar correctamente.
Saludos,
José Lalín
HDSerial
Publicado: Sab Jul 01, 2006 10:19 pm
por jlalin
Ramón,
Con L2Hex( nSerial ) ya tienes el número de serie en formato
hexadecimal. No entiendo que más quieres hacer.
Saludos,
José Lalín
HDSerial
Publicado: Sab Jul 01, 2006 11:11 pm
por zeasoftware
Gracias, lo voy a probar.
Aun estoy en la busqueda de como leer el #serie de la tarjeta principal.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
HDSerial
Publicado: Sab Jul 01, 2006 11:41 pm
por zeasoftware
La funcion regresa un valor de -2077315717-
y tengo vol=842EAD7B lo que corresponde a 2217651579
si uso HextoString("842EAD7B") me da: ",,{--"
que estoy haciendo mal?
Gracias de nuevo.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
--
HDSerial
Publicado: Dom Jul 02, 2006 12:46 am
por zeasoftware
perfecto pero.... el hextoString() aun me devuelve ",,{--"
ya que requiero el valor en Decimal.
Gracias
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
HDSerial
Publicado: Dom Jul 02, 2006 1:15 am
por zeasoftware
se me olvidaba, si asi lo hago,
cVol := L2Hex(cHDSerial)
cVolSelrial := HextToString(cVol) //regresa ",,{---"
Aun sigo buscando como hacerlo.
Gracias.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
HDSerial
Publicado: Lun Jul 03, 2006 2:47 pm
por Xevi
José,
Funciona PERFECTO!!!
MsgInfo( L2Hex( GetVolumeSerial( "C:" ) ) )
Un Saludo,
Xevi.
"José Lalín" <
dezac@corevia.com> ha escrit al missatge del grup de
discussió: [email=
44a6d8cd@news.xailer.com...]
44a6d8cd@news.xailer.com...[/email]
>
> Ramón,
>
> Con L2Hex( nSerial ) ya tienes el número de serie en formato hexadecimal.
> No entiendo que más quieres hacer.
>
> Saludos,
> José Lalín
HDSerial
Publicado: Lun Jul 03, 2006 4:39 pm
por jlalin
Xevi,
> Funciona PERFECTO!!!
¡ Claro ! Lo que no entiendo aún es a dónde quiere llegar Ramón con
HexToStr( GetVolumeSerial() ).
Saludos,
José Lalín
HDSerial
Publicado: Lun Jul 03, 2006 6:08 pm
por jlalin
Ramón,
vamos por partes.
La función GetVolumeSerial() devuelve el valor en decimal y la función
HexToDec() convierte un valor hexadecimal en decimal. Luego no tiene
sentido que hagas un HexToDec() del número de serie porque ya está en
decimal.
Saludos,
José Lalín
HDSerial
Publicado: Lun Jul 03, 2006 8:28 pm
por zeasoftware
El asunto es que requiero el valor del volumen en Decimal, en Hexadecimal no
me sirve, si lees bien el mensaje, te remarco que no funciona bien el
HextoDec, la funcion que posteaste funciona excelente.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
HDSerial
Publicado: Mar Jul 04, 2006 1:52 am
por zeasoftware
en decimal?
creo que me confundo, -2077315717- es un numero decimal, pero por que es negativo?, y el ultimo guión me aparece como un simbolo _ pero en alto, pAra que mejor me entiendas anexo la imagen.
El valor que obtengo del volumen usando procesos DOS es: 2217651579,
por eso mi duda, por que si el resultado desde el inicio es decimal, por que no se parece al que obtengo desde otra aplicacion que ya he usado por años?
Gracias por su tiempo.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
--
HDSerial
Publicado: Mar Jul 04, 2006 10:22 am
por jfgimenez
Ramón,
en decimal?
creo que me confundo, -2077315717- es un numero decimal, pero por que es negativo?, y el ultimo guión me aparece como un simbolo _ pero en alto, pAra que mejor me entiendas anexo la imagen.
El valor que obtengo del volumen usando procesos DOS es: 2217651579,
por eso mi duda, por que si el resultado desde el inicio es decimal, por que no se parece al que obtengo desde otra aplicacion que ya he usado por años?
Ambos valores son idénticos... teniendo en cuenta que son enteros de 32 bits, el primero con signo y el segundo sin signo. Haz la siguiente operación: 2^32 - 2077315717 y verás que obtienes el valor que tú esperas. Esto es simplemente la consecuencia de cómo maneja los números enteros el microprocesador. Es más, si conviertes a hexadecimal ambos valores con L2Hex() verás que obtienes exactamente el mismo resultado.
Ahora bien, si quieres que te devuelva un entero positivo, sólo hay que hacer que te devuelva un entero de 64 bits en vez de uno de 32 bits. Cambia la línea:
hb_retnl( nSerial );
por:
hb_retnll( nSerial );
y ya está

--
Un saludo,
José F. Giménez
http://www.xailer.com
--