Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Sistema de teste


valSistemasDelphi

Pergunta

8 respostass a esta questão

Posts Recomendados

  • 0
  • 0

Outra pergunta não corre o risco do usuário burlar aquele imenso código que você passou, tipo trocando a data do computador sei la ? Como sou muito cru ainda no Delphi, não tenho muita noção de como se inicia esse tipo de logica. Seria mais fácil se você pudesse fazer um pequeno exemplo e me passar! Teria como jhonas? porque com aquele código nem sei onde começo . Rs

 

Aproposito, baixei o componete TimeStop, mais não consegui baixar o componente no Delphi, Lembrando que uso o XE8, Nos videos que vi, instalavam com o arquivo .PAS, mais o que eu baixei não tem com essa extensão, ou não estou sabendo instalar o componente, se poder me ajudar, fica mais fácil

Editado por valSistemasDelphi
Link para o comentário
Compartilhar em outros sites

  • 0

Nos videos que vi, instalavam com o arquivo .PAS, mais o que eu baixei não tem com essa extensão, ou não estou sabendo instalar o componente

o arquivo do componente é mTimeStop.pas

No delphi XE8 eu não sei como é feita a instalaçao.

Se não quiser instalar o componente, a sugestão que eu te faço é:

No seu form de Menu coloque uma variavel Global Tipo Date  e coloque uma data que voce quer que seu programa expire ( pare de funcionar )

Var  Vdt : TDate;

Vdt := '25/12/2018';

Na propriedade OnActive do Form ou outra, voce testa essa variavel com a data do micro

se for maior voce termina o programa:    Application.Terminate;

Se o usuário burlar,  tipo trocando a data do computador  ?

nesse caso voce vai colocar a data em um arquivo texto ou com outra  extensão, e esconde-lo num lugar onde tenha muitos arquivos ... tipo a pasta System32 do windows ou qualquer outra que dificulte a localização do arquivo .. e voce deve usar um nome de arquivo que não chame a atenção, como no exemplo que passei:

var
  NomeDoLog: string;
  Arquivo: TextFile;
begin
  NomeDoArq := 'c:\windows\system32\help.txt';
  AssignFile(Arquivo, NomeDoArq);
  if FileExists(NomeDoArq) then
        Append(arquivo) { se existir, apenas adiciona linhas }
  else
        ReWrite(arquivo); { cria um novo se não existir }
  try
        WriteLn(arquivo, datetostr(now)); // data atual do micro
  finally
        CloseFile(arquivo)
  end;

Veja que nesse exemplo:  a cada vez que o programa for acionado ele vai gravar a data atual ... se o usuario alterar a data do micro, o seu programa vai comparar a data desse arquivo, com a data atual do micro. Se a data for diferente voce encerra o programa:

procedure TForm1.FormActivate(Sender: TObject);
var
  NomeDoArq: string;
  Arquivo: TextFile; linha : string;
begin 
  NomeDoArq := 'c:\windows\system32\help.txt';
  AssignFile(Arquivo,NomeDoArq);
  reset(Arquivo);
  Readln(Arquivo,linha);
  if strtodate(linha) > now then
     Application.Terminate; // termina o programa se a data do micro for alterada
  CloseFile(arquivo);

end;

em um exemplo mais pratico para voce entender melhor:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
    Vdt : TDate;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  NomeDoArq: string;
  Arquivo: TextFile;
begin
  NomeDoArq := 'c:\windows\system32\help.txt';
  AssignFile(Arquivo, NomeDoArq);
  if FileExists(NomeDoArq) then
        //Append(arquivo) { se existir, apenas adiciona linhas }
  //else
        ReWrite(arquivo); { cria um novo se não existir }
  try
        WriteLn(arquivo, datetostr(now)); // data atual do micro
  finally
        CloseFile(arquivo)
  end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
  NomeDoArq: string;
  Arquivo: TextFile; linha : string;
begin
  NomeDoArq := 'c:\windows\system32\help.txt';
  AssignFile(Arquivo,NomeDoArq);
  reset(Arquivo);
  Readln(Arquivo,linha);

  if (Vdt < now()) and (strtodate(linha) > Vdt) then
     Application.Terminate; // termina o programa se a data do micro for alterada

  CloseFile(arquivo);

end;

procedure TForm1.FormActivate(Sender: TObject);
begin
   Vdt := strtodate('25/11/2018');
end;

end.

Imagine que o Button1 é a rotina que voce vai gravar  a data, toda vez que o programa for executado

o Button2 é a rotina que vai verificar se a data de expiração do programa está de acordo com o previsto ou se a data do micro foi alterada

OBS: se voce que guardar todas as datas e quiser testa-las, voce deve liberar essa linhas de código

      //Append(arquivo) { se existir, apenas adiciona linhas }
  //else

mas tera que fazer a leitura de cada linha e testar se a data do micro não foi alterada para data anterior a instalação do programa ou a primeira vez que foi executado o programa.

agora voce deve usar a sua imaginação e modificar o código de acordo com a sua necessidade. ( não estou usando nesse caso nenhum componente )

abraço
 

Link para o comentário
Compartilhar em outros sites

  • 0

Essa parte do primeiro código e o segundo entendi, mais essa dos buttons você me confundiu, no caso esses outros exemplos são uma preposição que confirma os primeiros códigos ? Tipo são outros exemplos mais diferentes?

 

procedure TForm1.FormActivate(Sender: TObject);
begin
   Vdt := strtodate('25/11/2018');
end;

end.

 

Esse código, vai junto no mesmo Form ? que já tem o primeiro código?  Porque e muito código não entendi nada. Qual eu uso especificamente, por sequencia.

Editado por valSistemasDelphi
Link para o comentário
Compartilhar em outros sites

  • 0

o outro exemplo é uma preposição que confirma os primeiros códigos ?

sim

eu coloquei os códigos em botões para voce poder testar e ver que funciona

mas esses códigos podem estar em uma procedure independente.

Qual eu uso especificamente, por sequencia ?

o primeiro código a ser executado é a gravação da data do micro,  no arquivo que esta escondido.

o segundo código é o que testa a data para fazer o programa parar de funcionar,  se  a data ultrapassou a data que voce definiu, ou se data do micro foi alterada.

OBS: se quiser algo ainda mais simples, basta voce colocar o código abaixo em um campo que seja data e que necessariamente vai ter que receber a data atual do sistema.

var a,b : TDate;
begin
   a := date();
   b := strtodate('30/11/2018');

   if a >= b then
     begin
        MessageDlg('Esta é uma Vesão de Teste - Prazo Expirado!!! .'
        , mtInformation, [mbOk], 0);
        Application.Terminate;
     end;
end;

mas sugiro que voce tire a mensagem, e que o sistema simplesmente pare sem dar aviso algum ao usuário ... o mesmo vai pensar que houve algum problema com o programa e vai voltar a procurá-lo para saber o que houve.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Realmente esse código e muito melhor, por enquanto irei usar este, mais seguindo a lógica toda vez que expirar o programa pro cara, terei que entrar no Delphi Definir mais um tempo de uso e gerar um executavel.

 

Percebi também que se for um usuário mais esperto apenas ele mudando a data, para vamos supor que coloquei no sistema para o dia 23/12/2018, Para expirar. 

E Ele mudando a data para 23/11/2018, novamente, fica na mesma, usando. Não sei se fiz os testes errado, mais testei aqui várias possibilidades mudando a data do micro e funciona somente e claro pelo código a data passando do estipulado no Código.

 

Tive uma idéia, como posso fazer sem ter arquivo txt nem nada armazenado no pc do cara, para verificar a data atual, tipo instalei a programa no dia 23/11/2018.

Ai o mala vai e muda a data dele para o dia por exemplo, 23/10/2018.

 

Quero que quando ele fizer isso aparecesse uma msg no Programa dizendo que a Data tá errada sem lá,algo do tipo, ai em seguida fechasse o programa. Ai enquanto ele não colocar a Data serta do Dia, o Programa não abre. Tem como fazer assim.

 

 

Fiz uma gambiarra

var
  NomeDoArq: string;
  Arquivo: TextFile;
  linha : string;


begin
  NomeDoArq := 'D:\Programas Em Delphi\TV Online\help.txt';
  AssignFile(Arquivo, NomeDoArq);

  if FileExists(NomeDoArq) then

        //Append(arquivo) { se existir, apenas adiciona linhas }
  //else
        ReWrite(arquivo); { cria um novo se não existir }
  try
        WriteLn(arquivo, datetostr(now)); // data atual do micro

  finally
        CloseFile(arquivo) ;


  if (Vdt < now()) and (strtodate(linha) > Vdt) then
  Application.Terminate;

  Closefile(Arquivo) ;

 

Mais ta dando erro, de "Is Note a valid Date"

Editado por valSistemasDelphi
Link para o comentário
Compartilhar em outros sites

  • 0

amigo, nesse código que voce colocou, está apenas gravando a data no arquivo

NomeDoArq := 'D:\Programas Em Delphi\TV Online\help.txt';

se o arquivo ficar na mesma pasta do programa, então não vai servir para nada, pois poderá ser modificado pelo usuário.

  if (Vdt < now()) and (strtodate(linha) > Vdt) then
  Application.Terminate;

voce não fez a leitura do arquivo ( help.txt ) , portanto a variavel linha não recebeu um valor, portanto é uma data invalida.

use o ultimo código que te passei, e acrescente ao código ( além de terminar o programa o executavel ser apagado )

exemplos:

https://www.google.com.br/search?source=hp&amp;ei=EVb4W4CfDYGcwASGuYDoDA&amp;q=deletar+o+executavel+delphi&amp;btnK=Pesquisa+Google&amp;o que=deletar+o+executavel+delphi&amp;gs_l=psy-ab.3...3523.11316..11664...0.0..0.246.2951.9j17j1......0....1..gws-wiz.....0..0j0i131j0i22i30j33i22i29i30j33i21j33i160.3GJvpOD88zc

abraço

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas obrigado pela força, consegui montar de uma maneira eficiente agora.

 

Está ai o Código, fiz todos os testes necessarios para tentar bular o sistema, mais não tive exito Rs. 

Qualquer erro ai jhonas só me passar que altero na hora. Você e mais expert em Delphi!!

var
  a,b : TDate;
  NomeDoArq: string;
  Arquivo:TextFile; linha : string;
begin

    a := date();
    b := strtodate('22/12/2018'); // Data para expirar o programa


  NomeDoArq := 'C:\Windows\System\help.txt'; // Arquivo Na Pasta escolhida
  AssignFile(Arquivo,NomeDoArq);
  reset(Arquivo);
  Readln(Arquivo,linha);

       if Strtodate(linha) > now then // Aqui confere a data de instalação com a data do pc
          begin
          Showmessage('Data do computador errada');
           Application.Terminate;


   end
   else


   if a > b then

    begin
        MessageDlg('Esta é uma Vesão de Teste - Prazo Expirado, Compre uma licença para poder continuar usando o programa!!!!! .'
        , mtInformation, [mbOk], 0);
        Application.Terminate;

   end;

end;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...