![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Hola Novatin.
Bajo DOS podías obtener esos datos en la dirección 0xFFFF5, pero en win32/64 ya no es posible por que el espacio de direcciones de la bios está protegido por el S.O. Podes obtener esa información desde el registro de windows: Código:
#include <registry.hpp>
AnsiString __fastcall GetBiosDate()
{
char *RegPath = "\\HARDWARE\\DESCRIPTION\\System";
AnsiString BiosDate = "";
TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
reg->RootKey = HKEY_LOCAL_MACHINE;
__try {
if(reg->KeyExists(RegPath)) {
reg->OpenKey(RegPath, false);
BiosDate = reg->ReadString("SystemBiosDate");
}
}
__finally {
reg->CloseKey();
}
delete reg;
return BiosDate;
}
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage("BIOS Date: " + GetBiosDate());
}
![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#2
|
|||
|
|||
|
Gracias por la respuesta ecfisa...
Y, debo decir que el codigo me funciona correctamente para windowsXP pero no me funciona para Windows Millenium... , es decir el código lo quiero usar indistintamente con winxp o con millenium.. o win98... había probado el debug con d FFFF:5 l 8 con winxp, winme y win98 y me funcionan correctamente... Asi que fui naufragando con google en busca de una solución "generica" ... hasta que di con esta pagina: http://www.dailyfreecode.com/code/re...hine-1768.aspx Como podría insertarlo en una función en builder?? ... les aviso que de asm no se casi nada.. espero puedan ayudarme... saludos. Última edición por Novatin fecha: 21-05-2013 a las 22:56:13. Razón: aclaro: |
|
#3
|
||||
|
||||
|
Hola Novatin.
Otra opción es verificar sobre que OS esta corriendo la aplicación y de acuerdo a eso ejecutar una u otra función. En este hilo vas a poder encontrar algo al respecto: Cómo saber qué tipo de SO es. Sobre el código assembler, sin ser gran entendido en el tema veo que está llamando a la función INT 21H, que es una función multipropósito del DOS y no vas a poder usarla en aplicaciones de 32 bits. Saludos. ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#4
|
|||
|
|||
|
Bueno en parte creo que eso solucionaría mi problema, aunque se me agrandaría el código por tener que definir funciones para cada tipo de S.O
.... Pero ahora me quedé con muchas más dudas... (y como todo "buen programador" me gustaría que me ayudaran aclararlas)Disculpas si mis preguntas son tontas... ![]() * Porqué el debug si puede acceder a la captura del bios y porque builder no puede... ![]() * Otra Más... Encontré este pequeño fragmento de código que esta escrito en TurboC, y funciona correctamente en winxp , winmillenium y msdos... Código:
#include <dos.h>
#include <stdio.h>
void main()
{
int foo, i;
printf("\n");
for(i=0;i<8;i++)
{
foo = peekb(0xf000, 0xFFF5+i);
printf("%c", foo);
}
printf("\n");
}
Porque TurboC++ si puede acceder a obtener la fecha de bios de esta manera y Builder c++ No? (aun estando en winxp donde se supone que no debería funcionar... pos.. funciona..!) Cualquier idea bienvenida... gracias de antemano. |
|
#5
|
||||
|
||||
|
Hola Novatin.
Cita:
Cita:
Código:
#include <stdio.h>
int main(void)
{
unsigned char far *p = (unsigned char far *)0xF000FFF5; // (*)
int i;
for(i=0; i<8; i++)
printf("%c",(unsigned char far) *(p+i));
getchar();
return 0;
}
(*) Builder c++ no necesita far pointers por lo antedicho, es decir que si deseas probarlo en Builder C++ para salir de dudas, debes quitar "far" del código. Saludos. ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#6
|
|||
|
|||
|
Lamento ser tan incisivo ecfisa... (dejar de ser novato requiere mucho de esto en los días actuales..
)Probé el código siguiente en Builder con los consejos que me diste.. (sin los far): Código:
int main(int argc, char* argv[])
{
unsigned char *p = (unsigned char *)0xF000FFF5;
int i;
for(i=0; i<8; i++)
printf("%c",(unsigned char) *(p+i));
getchar();
return 0;
}
Entiendo que dice que hubo un error al leer la direccion F0000FFF5 pero de ahí a mas... voy perdido, me faltaría activar alguna otra opción en builder o debo volver al turboC?... ![]() PD: Es decir se me ocurre que podría hacer una pequeña aplicación en turboC a la que luego llamaría desde Builder con el valor de retorno de la fecha de Bios.. o quiza hasta formar una dll en TurboC y luego invocarla desde el programa de Builder... (aunque al hacer esto siento que soy infiel a Builder... )Última edición por Novatin fecha: 23-05-2013 a las 18:47:22. Razón: aclaracion |
|
#7
|
||||
|
||||
|
Cita:
![]() Sólo por curiosidad: ¿ Por que motivo deseas tomar la fecha de confección de la BIOS ? Saludos. ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Ayuda con Saber si una fecha es menor a la fecha del Servidor | microbiano | Varios | 3 | 01-05-2012 22:01:51 |
| Regrabar Bios con Delphi | kurono | Varios | 2 | 21-05-2010 19:46:15 |
| Ayuda, Como calcular fecha de vencimiento mensual a partir de una fecha x en delphi | Renis | Impresión | 4 | 24-08-2007 00:45:14 |
| modificar el BIOS | aprendiz2 | OOP | 2 | 29-04-2007 21:21:48 |
| mirar la bios | botones67 | Varios | 1 | 14-02-2005 16:52:45 |
|