Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
como dice Delphius, creo que es un problema de diseño

1.- iniciar aplicación
2.- comprobar si tenemos algun registro de id de disco duro / usuario
2.1.- si no lo tenemos: creamos la form de registro y lo registramos con un user y con el ID de disco duro
2.1.- si lo tenemos, pero es invalido, avisar y salir (posible reinstalación en otro pc)
2.2.- si lo tenemos, y es valido, continuar...
...

creo que esta es tu idea. Siguiendo esta idea, si te fijas, solo habra un único registro, y por lo tanto un único usuario, por lo que no tiene mucho sentido crear un registro de usuarios. Lo mejor seria simplemente, olvidarse del 'usuario'y del form del registro, que es lo que te esta creando confusión pues son innecesarias, y registrar la aplicación con el ID del disco duro.

1.- iniciar aplicación
2.- comprobar si tenemos el id del disco duro (por ejemplo, en un fichero, grabado en un recurso o bien en el registro como indicaba dec)
3.- si no lo tenemos, lo leemos y lo grabamos en nuestro programa (o registro, fichero, etc...)
3.- si lo tenemos, lo recogemos y comparamos con el del disco duro
3.1 - fallo : avisamos y salimos
3.2 - no fallo : se continua...
....

PD: si por el contrario aun quieres que se registren los usuarios (varios de ellos) entonces forzosamente te tiene que aparecer el form de registro o login al principio de la aplicación para comprobarlo con tu base de datos.

PDD : aun, si quieres q tu aplicación corra en varias maquinas, un usuario por maquina, deberia ser algo asi
1.- iniciar aplicación
2.- leer id de disco duro
3.- comprobar en base de datos si existe ese id
3.1 - si no existe : posible nueva instalación. Se abre el form de registro, pidiendo user y el id, y se graba en base de datos
3.2 - si existe se continua

como ves, este ultimo ejemplo registraria una nueva instalación con un nuevo usuario, pero si te fijas no sirve absolutamente de nada, al menos como protección de copia, pues si lo reinstalas en otro pc simplemente te pediria un nuevo usuario y continuaria. si por el contrario la lista de usuarios ya te es conocida, entonces lo mejor seria:

1.- iniciar aplicación
2.- pedir usuario
3.- comprobar usuario en base de datos
3.1.- existe : pedir id
3.1.1.- leer id de disco duro y comparar con la entregada
3.1.1.1.- fallo : aviso y salir
3.1.1.2.- no fallo : continuar normalmente
3.2.- no existe : pedir nuevo usuario o bien avisar y salir

este ultimo caso seria para proteger 'cada pc', para que usuarios que no sean el habitual no tengan acceso (aunque claro esta conociendo el usuario, ya se entraria, por lo que no es tampoco demasiado eficiente).

Creo q lo mejor es que nos digas de q quieres proteger el programa : de copia digamos ilegal o de acceso de usuarios invalidos.

Última edición por coso fecha: 12-07-2008 a las 16:48:21.
Responder Con Cita
  #2  
Antiguo 12-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
un ejemplo (aunque es casi lo mismo que puso dec)

Código Delphi [-]
procedure Form1.FormCreate(sender : TObject);
begin
     Mirar_numero_intentos_fallidos;
     if not Programa_registrado() then 
       if registro.ShowModal <> mrOk then Application.Terminate;
     ....
end;
 
procedure Mirar_numero_intentos_fallidos;
var 
     v : integer;
begin
     v := Leer_intentos;
     if v > 5 then begin Aviso(); application.Terminate; end;
end;
 
procedure Registro.Registrar;
var 
     id : string;
begin 
     if Edit2.Text <> 'clave' then 
     begin
         ShowMessage('clave incorrecta');
         Application.Terminate;
 { aqui tambien puedes grabar, en algun lado del pc (registro, fichero, base de datos,...) los intentos fallidos }
     end;
 
     id := CogerIddeDiscoDuro;
     // Por ejemplo, se registra insertando en base de datos
    qsec.Insert;
    qsec.FieldValues['id'] := id;
    qsec.FieldValues['clave'] := Edit2.Text;
    qsec.Post;
    // o creando un fichero con el id, clave 
    CreateFile(...)
    // o en el registro
    CreateRegistryKey(...)
end;
 
function Form1.Programa_registrado() : boolean;
var 
    id : string;
begin
    id := CogerIddeDiscoDuro;
    // Aqui puedes comprobarlo de varias maneras, segun este guardado
   Programa_registrado := fileexists(...) // si se registra creando un fichero...
   Programa_registrado := qsec.Locate('id',id,[]);    // si se inserto en una tabla...
   Programa_registrado := GetRegistryKey(...) // si se guardo en registro...
end;

no se... creo que poco mas se puede decir

a ver si te sirve entre todos saludos
Responder Con Cita
  #3  
Antiguo 13-07-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 19
BuRtOn Va por buen camino
Saludos amigos, muchisimas gracias Coso por colaborarme en el codigo, y ati delphius como siempre me ayudas, jeje, miren lo que yo quiero, es proteger mi aplicacion de lo siguiente:

Vendi mi aplicacion a un Gimnasio, le di el instalador y listo, el instalo el .exe de mi aplicacion en su pc y las bases de datos correspondientes, ...pero hay un problema si el dueño del Gimnasio coje y copia mi aplicacion o simplemente coje el Cd de instalacion que yo le di, e instala mi aplicacion en otro pc, o mejor dicho vende mi aplicacion a otro Gimnasio....entonces necesito seguridad de que si otra persona va a instalar mi aplicacion no pueda...que la aplicacion solo corra en los Gimnasios autorizados, osea los que me compran la aplicacion....y que una vez este instalada la aplicacion y el le de copiar al .exe y a las bases de datos y los pase a otro pc no pueda...pues ahi es donde emepieza a funcionar el Id del disco duro.....entonces miren lo que estoy tratando de hacer:


1. Para evitar que los Gimnasios que tengan mi cd de instalacion y traten de instalarlo no puedan, pues facil, siempre que vendemos la aplicacion y se instala ella genera el formulario que les digo que es el formulario de seguridad....este Formulario contiene lo siguiente:

* Serial: el serial es un codigo standar que nostros grabamos, para que se pueda instalar la aplicacion....ejemplo de lo que estoy explicando:

Código Delphi [-]
procedure TfrmSerial.Button2Click(Sender: TObject);
begin
if edtSerial.Text='xxxxxx' then
begin
ShowMessage('Bienvenidos a SISGYM');
end
else
begin
ShowMessage('Por favor no trate de crackear esta aplicacion');
end;
end;

como se pueden dar cuenta el serial esta predefinido en tiempo de programacion y el codigo seria es xxxxxx, entonces ese codigo siempre lo colocamos nostros apenas instalemos la aplicacion, por que eso es lo bueno, que nostros mismos vamos e instalamos nuestra aplicacion....asi que ese codigo solo lo sabemos mi compañero y yo...por ese lado evitaria que me copien la aplicacion desde el cd de instalacion que yo doy...


* Id: el Id del disco duro lo que me ayudaria a evitar es que me copien la aplicacion despues de instalarla en el pc del Gimnasio obtenga la aplicacion....ejemplo de lo que digo: Me compran la aplicaicon, la instalo en el pc del gimanasio, el dueño le da copiar a mi .exe y a las bases de datos, y le da pegar en otro pc, y listo queda de una mi aplicacion en otro pc, entonces si tengo el Id del disco duro, en una Base de datos o un archivo, como sea mas facil, pues simplemente que me genere la consulta siempre que se ejecute la aplicacion que si el Id es <> no me deje ejecutar la aplicacion.

Pero una de las cosas que quiero hacer y a lo mejor no me explique es lo que mencione anteriormente lo del Serial y el Id, ya saben por que el serial y por que el Id, lo que deseo es pues cuando la aplicacion se ejecute por primera vez me arroje el formulario de Seguridad e inmediatamente proceda a insertar los datos de Serial e Id...y se ejecute la consulta respectvia si los datos son correctos permita continuar con la aplicacion si no, pues simplemente emitir un shomessage('Datos de registros incorrectos'); y cierre la aplicacion, a eso se le puede agregar lo que decia coso, que si el numero de intentos es > 5 cierre la aplicacion---, lo otro es que una vez registrado el cliente no vuelva a salir el formulario, pero que siempre que se ejecute la aplicacion se ejecute la consulta de que si el Id es correcto....y si algun caso el Id no llega a ser correcto eso indica que la aplicacion esta en otro pc.... e inmediatamente vuelva a generar el formulario de ingrese Serial e Id........eso es lo que nesecito....y Coso, por archivos me parece como mas facil, segun tu codigo, pero no soy tan avanzado como tu, me gustaria que me pasaras un tutorial de archivos, pues tu das una buena opcion de almacenar el Id en un archivo pero no tengo ni idea como crearlo...no se como es la sintaxis, ni los parametros del archivo que mencionas, en fin espero que me puedas explicar con plastilina, jejeje, es que el tiempo apremia me toca entregar la aplicacion este martes, y necesito eso para que no me la roben, ya basta que aqui en Colombia, piratean todo...hay que tener cuidado con eso...les agradesco que me puedan colaborar....y espero que esta vez me hallan entendido mas....me demore mucho planteando bien mi pregunta...ha y por ultimo, esta es la funcion que tengo para extraer el Id:

Código Delphi [-]
//Funcion de seguridad
function GetVolumeID(DriveChar: Char): String;
  var
    MaxFileNameLength, VolFlags, SerNum: DWord;
  begin
    if GetVolumeInformation(PChar(DriveChar + ':\'), nil, 0,
       @SerNum, MaxFileNameLength, VolFlags, nil, 0)
    then
    begin
      Result := IntToHex(SerNum,8);
      Insert('-', Result, 5);
    end
    else
        Result := '';
  end;

Posdata: Tengo una aplicacion aparte que me extrae y me muestra por pantalla el Id del pc, entonces solo es insertar el Id de mi aplicacion en mi formulario de seguridad y comprobar si ese Id corresponde al del Pc...Gracias amigos por todo su tiempo prestado...
Responder Con Cita
  #4  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, me da la impresion que el problema no es que te demores planteando la pregunta, sino que no escuchas las respuestas si tienes otro programa donde coger la id, personalmente usaria este para 'marcar' tu aplicación con el id del disco duro (comprobando el serial) y luego al cargar la aplicación que se leyera directamente de ella misma y comprobase que es la misma.

Para grabar en un archivo, te dejo este link

Hoy es domingo, pero si tengo tiempo ya preparare un ejemplo (yo de ti por eso, no me esperaria ) Saludos.
Responder Con Cita
  #5  
Antiguo 13-07-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 19
BuRtOn Va por buen camino
Saludos Coso, jajaj, brother a cuando digo que tengo un programita aparte para sacar el Id es para no incluirlo dentro del formulario de seguridad...pero en lo que estoy confundido, es en como hago para que el formulario solo aparezca una vez, osea apenas se ejecute la aplicacion por primera vez, y que genere la consulta de que si los datos son correctos continue la aplicacion si son incorrectos termine la aplicacion, y que no vuelva a salir nunca mas....excepto si la aplicacion la intentan ejecutar desde otro pc, que vuelva a salir el formulario de seguridad.....


En pocas palabras que el formulario salga la primera vez de ejecucion pida datos y listo, no vuelva a salir, pero que siempre que se ejecute la aplicacion el haga internamente la consulta de que el Id que esta guardado en el archivo es = al Id que el esta extrayendo....y cuando el Id sea <> que vuelva a salir el formulario...que copdigo se utiliza ??, y no tanto el codigo si no en que evento lo ubico ??? gracias Coso has sido de gran ayuda hombre....
Responder Con Cita
  #6  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
si vamos, lo que ya te han respondido 5 veces seguidas...si lo que quieres es que te hagamos la faena, creo que estas en el sitio equivocado
Responder Con Cita
  #7  
Antiguo 13-07-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 19
BuRtOn Va por buen camino
mmm...solo necesito saber en que evento del formulario ubico el codigo que me han dado, para lo que aparezca solo una vez y ya...eso es todo...por eso dije que no me importa tanto el codigo....y sabes Coso, no me gusta que me hagan las cosas, es que cuando llebas como 4 o 5 meses programando apenas con Delphi y solo te enseñan lo mas basico de este mundo, es un poco duro aprender solo....pero hay voy entonces por favor no diga que yo quiero que me hagan mi trabajo, por que no soy parasito brother, y gracias....
Responder Con Cita
  #8  
Antiguo 13-07-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Cita:
Empezado por BuRtOn Ver Mensaje
Saludos Coso, jajaj, brother a cuando digo que tengo un programita aparte para sacar el Id es para no incluirlo dentro del formulario de seguridad...pero en lo que estoy confundido, es en como hago para que el formulario solo aparezca una vez, osea apenas se ejecute la aplicacion por primera vez, y que genere la consulta de que si los datos son correctos continue la aplicacion si son incorrectos termine la aplicacion, y que no vuelva a salir nunca mas....excepto si la aplicacion la intentan ejecutar desde otro pc, que vuelva a salir el formulario de seguridad.....


En pocas palabras que el formulario salga la primera vez de ejecucion pida datos y listo, no vuelva a salir, pero que siempre que se ejecute la aplicacion el haga internamente la consulta de que el Id que esta guardado en el archivo es = al Id que el esta extrayendo....y cuando el Id sea <> que vuelva a salir el formulario...que copdigo se utiliza ??, y no tanto el codigo si no en que evento lo ubico ??? gracias Coso has sido de gran ayuda hombre....
Cita:
Empezado por coso Ver Mensaje
si vamos, lo que ya te han respondido 5 veces seguidas...si lo que quieres es que te hagamos la faena, creo que estas en el sitio equivocado
He estado leyendo este hilo y francamente me ha desesperado un poco el hecho de que no quieras o no puedas comprender lo que te han dicho hasta ahora.

Mira, esto es cuestión de lógica

Cita:
Si no existe registro entonces muestro pantalla de registro
en caso contrario entro a la aplicación
Traducelo al código y verás que es muy simple,no te ahogues en un vaso de agua, ya has perdido demasiado tiempo con esto y puede que en este momento estén instalando una copia mas de tu programa.

Solo hay algo que no me checa de todo esto

Cita:
Empezado por BuRtOn
Vendi mi aplicacion a un Gimnasio, le di el instalador y listo, el instalo el .exe de mi aplicacion en su pc y las bases de datos correspondientes
Lo que hagas a partir de ahora nada tendrá efecto si tu cliente ya se hizo de una copia del instalador anterior con las intenciones que has comentado

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #9  
Antiguo 13-07-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Hola BuRtOn,
Dime, sin ofender ¿Estoy hablando en chino?

Porque no comprendo que no te hayas dado cuenta de lo que coso y yo te hemos estado diciendo.

¿Tanto cuesta hacer que cuando se crea la ventana principal hacer el chequeo de si está registrado el usuario y en base a ello decidir si se debe mostrar la ventana de registración o sino dar por válido la copia del ejecutable?

Veamos esto bajo la lupa:

1. En el evento OnCreate de tu form principal debes tener algo como esto:
Código Delphi [-]
RegistroValido := VerificarRegistro;
if NOT RegistroValido
   then begin
            // el sistema no ha sido registrado
            ShowMessage('Hey amigo... tienes una copia ilegal del sistema');
            MostrarVentanaDeRegistracion;
          end
   else begin
            // el sistema ya habia sido registrado
           ShowMessage('Gracias amigo por usar una copia legal');
           HacerAlgunaOperacionNecesaria;
         end;

VerificarRegistro es una función que cumple con el propósito de hacer la "consulta" y determinar si el usuario tiene una copia registrada. Ya sea que deba consultar a una base de datos, mirar en un archivo oculto, en el regitro de windows, no importa... Lo que interesa es que VerificarUsuario tiene la capacidad de saber si el sistema fue registrado apropiadamente.

Y bueno, se pregunta si esta todo en orden (debidamente registrado), si no lo está se muestra el form de registración y si está en orden simplemente se deja continuar con el trabajo: se habilitan los menues, se lanza el cuadro de login si es necesario, etc (eso ya depende de tu sistema).

¡Y listo! ¿Que más simple que esto?
¿Que sucede? He aqui una explicación del tema:

1. En la primera vez que se inicia el ejecutable, VerificarRegistro devuelve FALSE. Por tanto, habilitará el form de registro y mostrará el cartelito necesario.
2. El usuario por tanto se ve obligado a registrar el software. Si no lo registra, el sistema seguirá arrojando el cartelito y el form de registro.

No está demás decir que el sistema debe diseñarse para que esta form de registro sea en forma modal y que las opciones de menu y otras cosas estén inhabilitadas a excepción de las que permiten llevar al form de registro. Aunque todo esto dependerá de como esté hecho el sistema.

3. Una vez que el usuario registra apropiadamente el software, VerificarRegistro devolverá TRUE, por tanto seguirá el curso normal de trabajo.

BuRtOn, ¿Se entiende ahora?
Por cierto, yo que tu reemplazaría esos ShowMessage() por Application.MessageBox(), es mucho más estético y profesional.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Abrir un formulario hijo solo una vez Walterdf Varios 5 08-04-2008 17:15:01
dll + mostrar formulario albertoP OOP 1 04-12-2006 08:21:20
mostrar sólo 5 caracteres de un varchar(75) Giniromero Firebird e Interbase 4 19-09-2006 12:37:41
mostrar solo dos decimales clanmilano Varios 1 15-11-2005 23:31:52
mostrar SOLO cliente de los que tengo un sólo registro Giniromero SQL 15 11-06-2004 12:33:19


La franja horaria es GMT +2. Ahora son las 13:02:33.


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
Copyright 1996-2007 Club Delphi