Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-05-2013
Novatin Novatin is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 61
Poder: 12
Novatin Va por buen camino
Ayuda con Fecha de Bios

Hola...

Aqui voy de nuevo... intento obtener la fecha de Bios de la Pc y para ello pude averiguar que se puede obtener el mismo desde el debug con

FFFF:5 l 8

Pero no me figuro como implementarlo en builder c++ 6... alquien podría darme algun consejo de como implementarlo??

un saludo
Responder Con Cita
  #2  
Antiguo 21-05-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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;
}
Llamada:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  ShowMessage("BIOS Date: " + GetBiosDate());
}
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 21-05-2013
Novatin Novatin is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 61
Poder: 12
Novatin Va por buen camino
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 21:56:13. Razón: aclaro:
Responder Con Cita
  #4  
Antiguo 22-05-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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 ....
Responder Con Cita
  #5  
Antiguo 22-05-2013
Novatin Novatin is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 61
Poder: 12
Novatin Va por buen camino
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");
 }
Pero no puedo hacer que funcione en builder... porque no me reconoce la función "peekb", .. alguna idea para implementarla en builder?? .

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.
Responder Con Cita
  #6  
Antiguo 23-05-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Novatin.
Cita:
Empezado por Novatin Ver Mensaje
Porque TurboC++ si puede acceder a obtener la fecha de bios de esta manera y Builder c++ No?
Es que como te comenté anteriormente, Turbo C fue desarrollado para trabajar en entorno DOS y genera aplicaciones de 16 bits por lo que no tendrá problemas con acceder a esas direcciones.

Cita:
Empezado por Novatin Ver Mensaje
ncontré 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");
 }
Pero no puedo hacer que funcione en builder... porque no me reconoce la función "peekb", .. alguna idea para implementarla en builder?? .
El código anterior (sin utilizar peekb) puede implementarse como:
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;
}
Funcionará bíen con Turbo C, pero no será así en el compilador de 32 bits de Builder C++.

(*) 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 ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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 21:01:51
Regrabar Bios con Delphi kurono Varios 2 21-05-2010 18:46:15
Ayuda, Como calcular fecha de vencimiento mensual a partir de una fecha x en delphi Renis Impresión 4 23-08-2007 23:45:14
modificar el BIOS aprendiz2 OOP 2 29-04-2007 20:21:48
mirar la bios botones67 Varios 1 14-02-2005 15:52:45


La franja horaria es GMT +2. Ahora son las 21:52:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi