Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-02-2009
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
Problemas al escribir el registro de windows

Hola gente forista!!
Bueno les comento el problema que tengo.
Estoy haciendo una aplicacion que tendra una licencia y un sistema de logueo, entonces quiero guardar ( en la instalacion) los datos necesarios para hacer esto. El problema es que no quiero guardarlos como "reg.WriteString" por que de esta manera si entras en el registro de windows podes leerlas y yo no quiero eso. Entonces pense en poner todo dentro de un registro (ejemplo a continuacion) y guardar el registro como Binary y despues recuperar el registro con los datos. Yo hago este codigo para guardar los datos :
Código Delphi [-]
var
    reg2:TRegistry;
    opcion:TOpciones;
begin
    reg2:= TRegistry.Create;
    reg2.CreateKey(clave);
    reg2.OpenKey(clave,true);
    opcion.telefono:= Etelefono.Text;
    opcion.nombre:=  Enombre.Text;
    opcion.direccion:= Edireccion.Text;
    opcion.ciudad:=  Eciudad.Text;
    opcion.password:=  Epassword.Text;
    opcion.limiteprueba:= '5';
    opcion.codigo:= 'temp';
    reg2.WriteBinaryData('datos',opcion, SizeOf(opcion));

El problema es que cuando hago :

Código Delphi [-]
temp:=reg.ReadBinaryData('datos',opciones, SizeOf(opciones));

esto me retorna un entero y no el registro Topciones.
Podrian ayudarme a corregir esto? Como podria guardar los datos encriptados ( como binary) y recuperarlos bien para que no sea tan facil modificarlos??
Muchas gracias por tomarse el tiempo de leer mi post.
Un saludo a todos!!
Responder Con Cita
  #2  
Antiguo 17-02-2009
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
Bueno capas es algo muy complicado o imposible de realizar lo que quiero, por lo tanto me conformo con que me ayuden a guardar los datos en el registro con las siguientes preferencias :

1- que no se guarden con "WriteString" por que de este modos serian visibles entrando con RegEdit.
2- si se pueden agrupar antes de guardarlos, para guardarlos como una unica clave en el registro que luego pueda recuperar y asi rearmar los datos, mejor que mejor

Saludos!
Responder Con Cita
  #3  
Antiguo 17-02-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues no entiendo. En principio al usar:

Código Delphi [-]
reg.ReadBinaryData('datos',opciones, SizeOf(opciones));

los datos estarán en la variable Opciones. O sea, que ya lo tienes.

// Saludos
Responder Con Cita
  #4  
Antiguo 17-02-2009
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
claro claro, yo pense lo mismo , pero mira lo que dice delphi de la implementacion del ReadBinaryData :

Código Delphi [-]
function TRegistry.ReadBinaryData(const Name: string; var Buffer; BufSize: Integer): Integer;
var
  RegData: TRegDataType;
  Info: TRegDataInfo;
begin
  if GetDataInfo(Name, Info) then
  begin
    Result := Info.DataSize;
    RegData := Info.RegData;
    if ((RegData = rdBinary) or (RegData = rdUnknown)) and (Result <= BufSize) then
      GetData(Name, @Buffer, Result, RegData)
    else ReadError(Name);
  end else
    Result := 0;
end;

es una funcion que me retorna el largo de los datos en un entero, osea , en mi codigo, en la variable temp me queda un numero entero, y no el registro Topciones qeu guarde con toda la informacion.
O la otra posibilidad es que yo este entendiendo mal y que el registro qeude guardado en el parametro que le pase (en este caso "opciones") y que el valor numero que me retorna sea solo a modo informativo.. puede ser?
Responder Con Cita
  #5  
Antiguo 17-02-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por pablopessoa Ver Mensaje
O la otra posibilidad es que yo este entendiendo mal y que el registro qeude guardado en el parametro que le pase (en este caso "opciones") y que el valor numero que me retorna sea solo a modo informativo.. puede ser?
¡Pues es lo que te digo! Y lo que dice la ayuda de Delphi:

Cita:
Delphi syntax:

function ReadBinaryData(const Name: String; var Buffer; BufSize: Integer): Integer;

If successful, ReadBinaryData writes the requested data into Buffer and returns the number of bytes written.
Es decir, regresa el número de bytes escritos (normalmente lo mismo que indicas en el parámetro BufSize), y los datos son escritos en Buffer, que corresponde a tu variable Opciones.

// Saludos
Responder Con Cita
  #6  
Antiguo 17-02-2009
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
disculpa que te colme la paciencia, de verdad que no es mi intencion ser bruto, pero hay algo que no anda.
estoy siguiento paso a paso el programa y cuando grabo los datos en el registro los graba bien, es decir, graba el registro "opcion" con esta forma : ("sdfsd", "asdfaf", etc), el problema esta cuando recupero. Cuando ejecuto esta linea :

reg.ReadBinaryData('datos',opciones, SizeOf(opciones));

el debug(en la parte inferior izquierda que va mostrando los
valores que toman las variables) dice "opciones inaccessible value"
y probe de hacer un showmessage(opciones.nombre) para ver que me mostraba y me saca el cartelito vacio
perdona que te moleste asi, pero a mi me pone mas nervioso que a vos no poder resolver algo por no saber como ....
Responder Con Cita
  #7  
Antiguo 17-02-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Bueno, yo nunca he usado esos métodos, nada más me estoy basando en lo que dice la ayuda.

Ahora bien, se me ocurre preguntar: ¿cómo está definido TOpciones? Porque veo que tienes varios campos de texto, y no sé si los estás definiendo simplemente como string o bien como alguno de los tipos de longitud fija como string[84].

Si sólo pones string no te va a funcionar porque en ese caso, el campo es -en el fondo- sólo un apuntador a la cadena y al usar WriteString supongo que se escribirá sólo una cadena vacía. Debes usar cadenas de longitud fija.

// Saludos
Responder Con Cita
  #8  
Antiguo 17-02-2009
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
bueno ahora tengo una punta para probar, efectivamente TOpciones esta definido asi :
Código Delphi [-]
 TOpciones = record
      telefono: String;
      nombre: String;
      direccion: String;
      ciudad: String;
      codigo:string;
      password: String;
      limiteprueba: string;
    end;

dejame probar con cadenas de longitud fija y te comento que pasa
Muchas gracias por la paciencia !!
Responder Con Cita
  #9  
Antiguo 17-02-2009
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
bueno dejame contarte con total felicidad y mi mas grato agradecimiento que efectivamente ese era el problema!!
cambie los string por string [100] y anda muy bien!!!
Muchisimas gracias!! ahora puedo guardar toda la informacion de la instalacion en el registro de windows de una manera que sea bastante dificil poder manipular los datos
Nuevamente muchas gracias!!
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
Error al escribir en el Registro. nesetru Varios 5 18-03-2011 10:29:28
como escribir en el registro de windows Vista manolop API de Windows 3 08-12-2010 19:42:15
Error al escribir en el Registro en Windows Vista Ana María OOP 4 16-09-2008 16:35:13
Problemas con registro windows vista JF Sebastian Varios 6 14-01-2008 22:16:55
Problemas con el registro de windows CFPA86 Varios 1 25-06-2004 23:35:12


La franja horaria es GMT +2. Ahora son las 13:11:51.


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