Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Aplicacion con nº de serie (https://www.clubdelphi.com/foros/showthread.php?t=34369)

luxus 07-08-2006 20:01:11

Aplicacion con nº de serie
 
Hola a todos,
estoy terminando de diseñar una aplicación y me gustaría que el programa le pidiese al usuario un numero de serie para poder ejecutar el programa(solamente cuando se haya nstalado por primera vez). ¿Como puedo implementar esto?
Gracias y saludos

Pascalizado 07-08-2006 20:19:00

Puedes ver un componente de lazarus que se ocupa de eso, por supuesto que es opensource y prodras adaptarlo a delphi, la web de lazarus es http://lazarus.freepascal.org ahi podras encontrar el componente

saludos

dec 07-08-2006 20:20:19

Hola,

Bueno. El tema es muy amplio. Existen no pocos componentes que tratan de echar una mano. Yo alguna vez utilizé uno en concreto que viene con la Jedi Library. Se llama (si no ha cambiado) "TJvSerialMaker".

El funcionamiento era relativamente sencillo. Con dicho componente podías programar un "generador de números de serie", en base a dos cosas, fundamentalmente: el nombre y apellidos del usuario (por poner un caso, podría ser su correo, su nombre sólo, qué sé yo) y un número "base".

Entonces tú podías generar números de serie con dicho programa "generador de números de serie". Luego, en el programa en que pensabas utilizar dichos números de serie, tenías que utilizar el mismo componente "TJvSerialMaker".

El usuario podía "registrar" la aplicación introduciendo su nombre y el número de serie generado con el programa que he dicho antes. Es decir, se suponía que el usuario te hacía llegar un "pedido". Tú aceptabas el pedido, solicitabas el nombre y apellido del usuario, generabas un número de serie en base a esos datos (y el número base, al que luego me referiré) y le mandabas al usuario su número de serie.

¿Qué se hacía en la aplicación para comprobar la valided del número de serie? El propio componente "TJvSerialMaker", como he dicho, se encargaba de ello. En la aplicación, para empezar, se utilizaba el mismo número base con el que se habían generado los números de serie. Con ese número base y el nombre y apellidos del usuario,... el asunto estaba hecho.

O sea, el número de serie que tú le pasabas al usuario (generado por ti mismo) tenía al cabo que coincidir con el que el que se generaba en la aplicación "cliente". En ambos casos se utilizaban los mismos datos, o sea, que la cosa no podía fallar, a no ser que el usuario no indicara bien su nombre, o no proporcionara un número de serie correcto, claro está.

Me he liado demasiado, creo,... pero, por mucho que parezca un embrollo, es todo lo contrario: una forma más o menos sencilla de implementar algo como lo que precisas, puesto que, como he dicho al comienzo, hay no pocos componentes bastante más complejos y si se quiere también más completos.

PD. Creo recordar que se incluye un ejemplo de uso del componente entre los ejemplos que vienen en la Jedi Library.

vtdeleon 07-08-2006 20:23:45

Se puede hacer de diferentes formas usando:

1 - Un archivo
2 - Un campo en la Base de datos
3 - El Registro de Windows

La idea es:

1 - Si no existe el archivo, que pida al usuario la serie. Una vez validado crear el archivo.

2 - Un campo llamado "Inicidado" qeu indique las veces que entran al sistema. Si éste dice 0 es porque es la 1ra vez.

3 - Lo mismo que el archivo, si no existe el key en el registro que pida la serie

Aunque los metodos anteriores no son infalibles.

seoane 07-08-2006 22:47:32

Aunque poco mas se puede decir que lo que ya te dijeron, voy a poner un poco de código a la teoría.

Aquí te dejo tres funciones, la primera comprueba si el programa esta registrado, devolviendo TRUE si lo esta, colocala en las partes de tu programa en la que necesites comprobar si el programa esta registrado (al iniciar, al guardar, etc). La siguiente registra el programa pasándole como parámetro el código de registro, y la tercera genera el código de registro, esta evidentemente no la incluirás dentro de tu programa sino en un programa aparte que utilizaras para generar los códigos cuando el cliente pague.

El parámetro Ident que aparece en las tres funciones tiene los siguientes usos. Si es un valor constante todos tus programas tendrán el mismo código de registro, pero puede ser el nombre del usuario o el numero de serie del disco duro, por ejemplo. En el primer caso para cada usuario se generaría un código diferente y en el segundo habría que generar un código diferente cada vez que el programa se instalase en un equipo diferente.

Código Delphi [-]
uses Registry;

const
  Clave = 1978;

function Cifrar(Texto: string; Clave: Longint): string;
var
  i: integer;
begin
  Result:= '';
  RandSeed:= Clave;
  for i:= 1 to Length(Texto) do
    Result:= Result + IntToHex(Byte(Texto[ i ]) xor Byte(Random(256)),2);
end;

function EstaRegistrado(Ident: string): boolean;
begin
  Result:= FALSE;
  with TRegistry.Create do
  try
    RootKey:= HKEY_CURRENT_USER;
    if OpenKey('\SOFTWARE\TuAplicacion',FALSE) then
    begin
      if ValueExists('Reg') then
        if ReadString('Reg') = Cifrar(Ident, Clave) then
          Result:= TRUE;
      CloseKey;
    end;
  finally
    Free;
  end;
end;

function Registrar(Ident: string; Codigo: string): boolean;
begin
  with TRegistry.Create do
  try
    RootKey:= HKEY_CURRENT_USER;
    if OpenKey('\SOFTWARE\TuAplicacion',TRUE) then
    begin
      WriteString('Reg',Codigo);
      CloseKey;
    end;
  finally
    Free;
  end;
  Result:= EstaRegistrado(Ident);
end;

function GenerarCodigo(Ident: string): string;
begin
  Result:= Cifrar(Ident, Clave);
end;

La funcion Cifrar se utiliza como un generador de Hash pero puede sustituirse por cualquier algoritmo mejor, md5 por ejemplo.


La franja horaria es GMT +2. Ahora son las 19:54:24.

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