Lisanslama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Lisanslama

Mesaj gönderen ozcank »

Arkadaşlar Merhaba;
Benim delphi 2005 de bir lisanslama algoritmam vardı ve ben bunu şimdi delphi 2010 da kullanmak istiyorum fakat bazı hatalar veriyor yardımcı olabilirmisiniz?

Kod: Tümünü seç


var
  Form1: TForm1;
  Kalan :Integer;

implementation

uses EMANETGIRIS, EMANETCIKIS, EMANETRAPOR, Unit5, Unit8, Unit9, EMANETANA,
  Lisanslama;

{$R *.dfm}

//Lisanslama Basla
const
  C1 = 52845;
  C2 = 22719;

function Decode(const S: AnsiString): AnsiString;
const
  Map: array[Char] of Byte = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 52, 53,
    54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
    3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
    20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30,
    31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
    46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0);

[color=#FF0000]// tam burda "[DCC Error] EMANETMENU.pas(74): E2072 Number of elements (256) differs from declaration (65536)" bu hatayı veriyor[/color]

var
  I: LongInt;
begin
  case Length(S) of
    2:
      begin
        I := Map[S[1]] + (Map[S[2]] shl 6);
        SetLength(Result, 1);
        Move(I, Result[1], Length(Result))
      end;
    3:
      begin
        I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12);
        SetLength(Result, 2);
        Move(I, Result[1], Length(Result))
      end;
    4:
      begin
        I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12) +
          (Map[S[4]] shl 18);
        SetLength(Result, 3);
        Move(I, Result[1], Length(Result))
      end
  end
end;

function PreProcess(const S: AnsiString): AnsiString;
var
  SS: AnsiString;
begin
  SS := S;
  Result := '';
  while SS <> '' do
  begin
    Result := Result + Decode(Copy(SS, 1, 4));
    Delete(SS, 1, 4)
  end
end;

function InternalDecrypt(const S: AnsiString; Key: Word): AnsiString;
var
  I: Word;
  Seed: Word;
begin
  Result := S;
  Seed := Key;
  for I := 1 to Length(Result) do
  begin
    Result[I] := Char(Byte(Result[I]) xor (Seed shr 8));

[color=#FF0000]//Tam burda "[DCC Error] EMANETMENU.pas(123): E2010 Incompatible types: 'AnsiChar' and 'Char'"[/color] " hata veriyor

    Seed := (Byte(S[I]) + Seed) * Word(C1) + Word(C2)
  end
end;

function Decrypt(const S: AnsiString; Key: Word): AnsiString;
begin
  Result := InternalDecrypt(PreProcess(S), Key)
end;

function Encode(const S: AnsiString): AnsiString;
const
  Map: array[0..63] of Char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
    'abcdefghijklmnopqrstuvwxyz0123456789+/';
var
  I: LongInt;
begin
  I := 0;
  Move(S[1], I, Length(S));
  case Length(S) of
    1:
      Result := Map[I mod 64] + Map[(I shr 6) mod 64];

[color=#FF0000]// Tam burda "[DCC Warning] EMANETMENU.pas(144): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'" hata veriyor[/color]

    2:
      Result := Map[I mod 64] + Map[(I shr 6) mod 64] +
        Map[(I shr 12) mod 64];

[color=#FF0000]// Tam Burda "[DCC Warning] EMANETMENU.pas(147): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'[/color] " hata veriyor

    3:
      Result := Map[I mod 64] + Map[(I shr 6) mod 64] +
        Map[(I shr 12) mod 64] + Map[(I shr 18) mod 64]
  end

[color=#FF0000]//Tam burda "[DCC Warning] EMANETMENU.pas(151): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'" hatayı veriyor[/color]

end;

function PostProcess(const S: AnsiString): AnsiString;
var
  SS: AnsiString;
begin
  SS := S;
  Result := '';
  while SS <> '' do
  begin
    Result := Result + Encode(Copy(SS, 1, 3));
    Delete(SS, 1, 3)
  end
end;

function InternalEncrypt(const S: AnsiString; Key: Word): AnsiString;
var
  I: Word;
  Seed: Word;
begin
  Result := S;
  Seed := Key;
  for I := 1 to Length(Result) do
  begin
    Result[I] := Char(Byte(Result[I]) xor (Seed shr 8));

[color=#FF0000]//Tam burda "[DCC Error] EMANETMENU.pas(176): E2010 Incompatible types: 'AnsiChar' and 'Char' " hatayı veriyor[/color]

    Seed := (Byte(Result[I]) + Seed) * Word(C1) + Word(C2)
  end
end;

function Encrypt(const S: AnsiString; Key: Word): AnsiString;
begin
  Result := PostProcess(InternalEncrypt(S, Key))
end;

{ TForm2 }

procedure TForm1.RegKayit;

[color=#FF0000]//Tam burda " [DCC Error] EMANETMENU.pas(188): E2003 Undeclared identifier: 'RegKayit' " hata veriyor[/color]

var
Reg:TRegistry;
Expired:Integer;
Tarih:Tdate;
begin
   try
   reg:=TRegistry.create;
   reg.RootKey:=HKEY_LOCAL_MACHINE;
    if reg.KeyExists('software\Emanet') then
      begin
        reg.OpenKey('software\Emanet',false);
        Tarih:=reg.ReadDate('sdate');
        Kalan:=round(tarih-date);
        Expired:=Reg.ReadInteger('expired');
        ProgressBar1.Position:=30-kalan;
        label1.Caption:=Format('DEMO Kalan Süre %d gün.',[kalan]);
        if Kalan>Expired then
           begin
             Application.MessageBox('Kaçak Kullanım..!','HATA',mb_ok+MB_ICONERROR);
             Application.Terminate;
           end else
       begin
        reg.WriteInteger('expired',kalan);
        reg.CloseKey;
         if kalan<0 then
          begin
            Application.MessageBox('DEMO için Kullanım süresi doldu..!','DEMO',mb_ok+MB_ICONWARNING);
            Application.Terminate;
          end;
       end;
      end else
       begin
          reg.CreateKey('software\emanet');
          reg.OpenKey('software\Emanet',false);
          reg.WriteDate('sdate',date+30);
          reg.WriteInteger('expired',30);
          reg.WriteInteger('MachineID',12291238);
          reg.WriteDate('ActivationDate',date);
          reg.WriteTime('ActivationTime',time);
          reg.WriteString('VolumeSerial','NONE54312');
          reg.WriteString('UnlockKey','NONEDEFAULT');
          reg.CloseKey;
       end;
   finally
   reg.free;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
RegKontrol;
end;

function TForm1.RegKontrol: Boolean;
var
r:TRegistry;
uzunluk:integer;
i:integer;
rakam:integer;
karekter:string;
tek:string;
bilgi:string;
hdd:integer;
sayi:Double;
tarih:TDate;
Saat:Ttime;
Anahtar:String;
Kalan,Expired:Integer;
Sahip:String;
begin
   try
    r:=TRegistry.create;
    r.RootKey:=HKEY_LOCAL_MACHINE;
    if r.KeyExists('Software\Emanet') then
    begin
    r.OpenKey('Software\Emanet',false);
    tarih:=r.ReadDate('ActivationDate');
    Saat:=r.ReadTime('ActivationTime');
    Anahtar:=r.ReadString('UnLockKey');
    Sahip:=r.ReadString('RegistereDowner');
    r.CloseKey;
    end else
    begin
          r.CreateKey('software\Emanet');
          r.OpenKey('software\Emanet',false);
          r.WriteDate('sdate',date+30);
          r.WriteInteger('expired',30);
          r.WriteInteger('MachineID',12291238);
          r.WriteDate('ActivationDate',date);
          r.WriteTime('ActivationTime',time);
          r.WriteString('UnlockKey','NONEDEFAULT');
          r.WriteString('RegisreteDowner','UNKNOWN');
          r.CloseKey;
    end;
    ctl3d:=False;
    uzunluk:=Length(SysInfo.VolumeSerialNo);
    karekter:=SysInfo.VolumeSerialNo;
  for i:=1 to uzunluk do
      begin
       tek:=copy(karekter,i,1);
      if (tek<'A') and (tek>'0') then bilgi:=bilgi+tek;
           end;
     hdd:=StrToInt(bilgi);
     sayi:=Round((hdd*tarih/5431)*tarih);
     if Anahtar<>Encrypt(CurrToStr(sayi),1238) then
       begin
        form1.Button9.Visible:=true;
        r.OpenKey('software\Emanet',false);
        Tarih:=r.ReadDate('sdate');
        Kalan:=round(tarih-date);
        Expired:=R.ReadInteger('expired');
        ProgressBar1.Position:=30-kalan;
        label1.Caption:=Format('DEMO Kalan Süre %d gün.',[kalan]);
        if Kalan>Expired then
           begin
             Application.MessageBox('Kaçak Kullanım..!','HATA',mb_ok+MB_ICONERROR);
             Application.Terminate;
           end else
       begin
        r.WriteInteger('expired',kalan);
        r.CloseKey;
         if kalan<0 then
          begin
            Application.MessageBox('DEMO için Kullanım süresi doldu..!','DEMO',mb_ok+MB_ICONWARNING);
            Application.Terminate;
          end;
       end;


       end else
        begin
          ProgressBar1.Visible:=false;
          label1.Caption:='Lisans Sahibi :'+Sahip;
        end;
 finally
   r.free;
  end;


end;

end.
// Lisanslama Son
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Lisanslama

Mesaj gönderen ozcank »

Arkadaşlar SysInfo Yerine kullanabilirim?
uzunluk:=Length(SysInfo.VolumeSerialNo);
karekter:=SysInfo.VolumeSerialNo;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Lisanslama

Mesaj gönderen mrmarman »

Merhaba.

- Delphi 2010'da Char yerine AnsiChar kullanmalısınız. Bu sorunla sıkça da karşılaşacaksınız. :idea:

Kod: Tümünü seç

   Result[I] := AnsiChar(Byte(Result[I]) xor (Seed shr 8));
Resim
Resim ....Resim
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Lisanslama

Mesaj gönderen ozcank »

mrmarman ;

Kdun bu kısmı D2005 çalışıyordu D7 de bir türlü çalıştıramadım yerine nasıl bir kod kullanabilirim ? yardım eder misiniz?

Burda hata veriyor
[Error] EMANETMENU.pas(228): Undeclared identifier: 'SysInfo'

Kod: Tümünü seç

uzunluk:=Length(SysInfo.VolumeSerialNo);
karekter:=SysInfo.VolumeSerialNo;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Lisanslama

Mesaj gönderen mrmarman »

ozcank yazdı:mrmarman ;

Kdun bu kısmı D2005 çalışıyordu D7 de bir türlü çalıştıramadım yerine nasıl bir kod kullanabilirim ? yardım eder misiniz?

Burda hata veriyor
[Error] EMANETMENU.pas(228): Undeclared identifier: 'SysInfo'

Kod: Tümünü seç

uzunluk:=Length(SysInfo.VolumeSerialNo);
karekter:=SysInfo.VolumeSerialNo;
İlgili UNIT Sırasıyla
(1) Proje klasöründe yok veya
(2) DPR projene eklenmemiş veya
(3) USES satırında eksik.

Sadece Volume Seri nosu okuyorsan bu UNIT'i kullanmak yerine aşağıdaki şekilde çözüm üretebilirsin.

Kod: Tümünü seç

function  VolumeSeri(const cSurucu: char): string;
var
  Gecici: dWord;
  VolumeFlags: dWord;
  VolumeInfo: array[0..MAX_PATH] of char;
  VolumeSerialNumber: dWord;
begin
  GetVolumeInformation(PChar(cSurucu + ':\'),
    VolumeInfo, SizeOf(VolumeInfo),
    @VolumeSerialNumber, Gecici,
    VolumeFlags, nil, 0);
    Result := Format('%8x', [VolumeSerialNumber]);
end;

Kod: Tümünü seç

uzunluk  :=Length( VolumeSeri('C') );
karekter :=VolumeSeri('C');
Resim
Resim ....Resim
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Lisanslama

Mesaj gönderen ozcank »

mrmarman dediğiniz şekilde oldu orayı aştım aslında bende bu kodu siteden hazır indirmiştim d2005 çalıştırdım D7 de değişik yerlerde hata veriyor.

RegKayıt da şöyle bir hata veriyor

[Hint] EMANETMENU.pas(47): Private symbol 'RegKayit' declared but never used

Kod: Tümünü seç

   Procedure RegKayit;
    Function RegKontrol:Boolean;


sizden rica etsem eğer vaktiniz varsa bağlanarak sadece bu kod için bana yardımcı olur musunuz?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Lisanslama

Mesaj gönderen mrmarman »

o hata değil sadece bir "Hint" meraklısına bilgi / hatırlatma mahiyetinde.

Demiş ki RegKayit diye bir procedure tanımlamışsın ama hiç bir yerde kullanmamışsın.

(1) Dilersen RegKayit kısmını tümüyle kaldırabilirsin, projene zarar vermez.
(2) Eğer kullanmayı planlayıp da hiç kullanmamışsan, demek oluyor ki bir olayı atlamışsındır. Oraya odaklanıp çözümünü üret.

Öztele RegKayit procedure, şimdilik fazlalık olarak süs gibi duruyor. :)
Resim
Resim ....Resim
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Lisanslama

Mesaj gönderen ozcank »

RegKayıt var aslında ;

Kod: Tümünü seç

procedure TForm2.RegKayit;
var
Reg:TRegistry;
Expired:Integer;
Tarih:Tdate;
begin
   try
   reg:=TRegistry.create;
   reg.RootKey:=HKEY_LOCAL_MACHINE;
    if reg.KeyExists('software\EmanetPro') then
      begin
        reg.OpenKey('software\EmanetPro',false);
        Tarih:=reg.ReadDate('sdate');
        Kalan:=round(tarih-date);
        Expired:=Reg.ReadInteger('expired');
        ProgressBar1.Position:=30-kalan;
        label1.Caption:=Format('DEMO Kalan Süre %d gün.',[kalan]);
        if Kalan>Expired then
           begin
             Application.MessageBox('Kaçak Kullanım..!','HATA',mb_ok+MB_ICONERROR);
             Application.Terminate;
           end else
       begin
        reg.WriteInteger('expired',kalan);
        reg.CloseKey;
         if kalan<0 then
          begin
            Application.MessageBox('DEMO için Kullanım süresi doldu..!','DEMO',mb_ok+MB_ICONWARNING);
            Application.Terminate;
          end;
       end;
      end else
       begin
          reg.CreateKey('software\EmanetPro');
          reg.OpenKey('software\EmanetPro',false);
          reg.WriteDate('sdate',date+30);
          reg.WriteInteger('expired',30);
          reg.WriteInteger('MachineID',12291238);
          reg.WriteDate('ActivationDate',date);
          reg.WriteTime('ActivationTime',time);
          reg.WriteString('VolumeSerial','NONE54312');
          reg.WriteString('UnlockKey','NONEDEFAULT');
          reg.CloseKey;
       end;
   finally
   reg.free;
  end;
end;


Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Lisanslama

Mesaj gönderen mrmarman »

RegKayit aslında var olduğunu HINT de söylemiş zaten. Asıl konu sen bunu hiçbir yerde kullanmamışsın.

Bir procedure'ün veya fonksiyonun varlığı yetmez bir de kullanıyor olman gerek. Herhangi bir yerde kullanmıyorsan var olmasının hiçbir anlamı yoktur. Silebilirsin. Bunda bir sakınca yoktur. :idea:
Resim
Resim ....Resim
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Lisanslama

Mesaj gönderen ozcank »

Bu Kod da "Reg" hatası veriyor ben bu bloğu hiç değiştirmedim

[Warning] EMANETMENU.pas(266): Variable 'Reg' might not have been initialized

Kod: Tümünü seç

procedure TForm1.RegKayit;
var
Reg:TRegistry;
Expired:Integer;
Tarih:Tdate;
begin
   try
   reg:=TRegistry.create;
   reg.RootKey:=HKEY_LOCAL_MACHINE;
    if reg.KeyExists('software\EmanetPro') then
      begin
        reg.OpenKey('software\EmanetPro',false);
        Tarih:=reg.ReadDate('sdate');
        Kalan:=round(tarih-date);
        Expired:=Reg.ReadInteger('expired');
        ProgressBar1.Position:=30-kalan;
        label1.Caption:=Format('DEMO Kalan Süre %d gün.',[kalan]);
        if Kalan>Expired then
           begin
             Application.MessageBox('Kaçak Kullanım..!','HATA',mb_ok+MB_ICONERROR);
             Application.Terminate;
           end else
       begin
        reg.WriteInteger('expired',kalan);
        reg.CloseKey;
         if kalan<0 then
          begin
            Application.MessageBox('DEMO için Kullanım süresi doldu..!','DEMO',mb_ok+MB_ICONWARNING);
            Application.Terminate;
          end;
       end;
      end else
       begin
          reg.CreateKey('software\EmanetPro');
          reg.OpenKey('software\EmanetPro',false);
          reg.WriteDate('sdate',date+30);
          reg.WriteInteger('expired',30);
          reg.WriteInteger('MachineID',12291238);
          reg.WriteDate('ActivationDate',date);
          reg.WriteTime('ActivationTime',time);
          reg.WriteString('VolumeSerial','NONE54312');
          reg.WriteString('UnlockKey','NONEDEFAULT');
          reg.CloseKey;
       end;
   finally
   reg.free;
  end;
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Lisanslama

Mesaj gönderen mrmarman »

ozcank yazdı:Bu Kod da "Reg" hatası veriyor ben bu bloğu hiç değiştirmedim

[Warning] EMANETMENU.pas(266): Variable 'Reg' might not have been initialized

Kod: Tümünü seç

procedure TForm1.RegKayit;
var
Reg:TRegistry;
Expired:Integer;
Tarih:Tdate;
begin
   try
   reg:=TRegistry.create;
   reg.RootKey:=HKEY_LOCAL_MACHINE;
    if reg.KeyExists('software\EmanetPro') then
      begin
        reg.OpenKey('software\EmanetPro',false);
        Tarih:=reg.ReadDate('sdate');
        Kalan:=round(tarih-date);
        Expired:=Reg.ReadInteger('expired');
        ProgressBar1.Position:=30-kalan;
        label1.Caption:=Format('DEMO Kalan Süre %d gün.',[kalan]);
        if Kalan>Expired then
           begin
             Application.MessageBox('Kaçak Kullanım..!','HATA',mb_ok+MB_ICONERROR);
             Application.Terminate;
           end else
       begin
        reg.WriteInteger('expired',kalan);
        reg.CloseKey;
         if kalan<0 then
          begin
            Application.MessageBox('DEMO için Kullanım süresi doldu..!','DEMO',mb_ok+MB_ICONWARNING);
            Application.Terminate;
          end;
       end;
      end else
       begin
          reg.CreateKey('software\EmanetPro');
          reg.OpenKey('software\EmanetPro',false);
          reg.WriteDate('sdate',date+30);
          reg.WriteInteger('expired',30);
          reg.WriteInteger('MachineID',12291238);
          reg.WriteDate('ActivationDate',date);
          reg.WriteTime('ActivationTime',time);
          reg.WriteString('VolumeSerial','NONE54312');
          reg.WriteString('UnlockKey','NONEDEFAULT');
          reg.CloseKey;
       end;
   finally
   reg.free;
  end;
end;

Çözüm :
reg:=TRegistry.create;
satırını TRY bloğunun üstüne yani dışına çıkar.
Sebep: TRY bloğu içerisinde CREATE edilen bir sınıf, bileşenin CREATE işleminin başarısız olabilme ihtimali vardır anlamına gelir. Eğer create edilememişse FINALLY kısmında FREE de edemezsin. Onun için finalde FREE edilecek ise TRY dışında bunun CREATE edilmesi ve sorun yoksa bu bloğa girmesi beklenir.
Resim
Resim ....Resim
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Lisanslama

Mesaj gönderen ozcank »

Aldım abim o bloğu da atladık bur da takıldı yine her şey normal gibi gözüküyor ;

[Warning] EMANETMENU.pas(340): Variable 'tarih' might not have been initialized

bu satır da

Kod: Tümünü seç

sayi:=Round((hdd*tarih/5431)*tarih);

Kod: Tümünü seç

/////////////  REG KAYIT BAŞLA
function TForm1.RegKontrol: Boolean; //Lisans
var
r:TRegistry;
uzunluk:integer;
i:integer;
rakam:integer;
karekter:string;
tek:string;
bilgi:string;
hdd:integer;
sayi:Double;
tarih:TDate;
Saat:Ttime;
Anahtar:String;
Kalan,Expired:Integer;
Sahip:String;
begin
    r:=TRegistry.create;
    try
//    r:=TRegistry.create;
    r.RootKey:=HKEY_LOCAL_MACHINE;
    if r.KeyExists('Software\EmanetPro') then
    begin
    r.OpenKey('Software\EmanetPro',false);
    tarih:=r.ReadDate('ActivationDate');
    Saat:=r.ReadTime('ActivationTime');
    Anahtar:=r.ReadString('UnLockKey');
    Sahip:=r.ReadString('RegistereDowner');
    r.CloseKey;
    end else
    begin
          r.CreateKey('software\EmanetPro');
          r.OpenKey('software\EmanetPro',false);
          r.WriteDate('sdate',date+30);
          r.WriteInteger('expired',30);
          r.WriteInteger('MachineID',12291238);
          r.WriteDate('ActivationDate',date);
          r.WriteTime('ActivationTime',time);
          r.WriteString('UnlockKey','NONEDEFAULT');
          r.WriteString('RegisreteDowner','UNKNOWN');
          r.CloseKey;
    end;
      ctl3d:=False;
      uzunluk  :=Length( VolumeSeri('C') );
      karekter :=VolumeSeri('C');
//    uzunluk:=Length(SysInfo.VolumeSerialNo);
//    karekter:=SysInfo.VolumeSerialNo;
    for i:=1 to uzunluk do
      begin
      tek:=copy(karekter,i,1);
      if (tek<'A') and (tek>'0') then bilgi:=bilgi+tek;
           end;
     hdd:=StrToInt(bilgi);
     sayi:=Round((hdd*tarih/5431)*tarih);
     if Anahtar<>Encrypt(CurrToStr(sayi),1238) then
     begin
     form1.BitBtn1.Visible:=true;
     r.OpenKey('software\EmanetPro',false);
     Tarih:=r.ReadDate('sdate');
     Kalan:=round(tarih-date);
     Expired:=R.ReadInteger('expired');
     ProgressBar1.Position:=30-kalan;
     label2.Caption:=Format('DEMO Kalan Süre %d gün.',[kalan]);
     if Kalan>Expired then
     begin
     Application.MessageBox('Kaçak Kullanım..!','HATA',mb_ok+MB_ICONERROR);
     Application.Terminate;
          end else
       begin
        r.WriteInteger('expired',kalan);
        r.CloseKey;
         if kalan<0 then
          begin
            Application.MessageBox('DEMO için Kullanım süresi doldu..!','DEMO',mb_ok+MB_ICONWARNING);
            Application.Terminate;
          end;
       end;

       end else
        begin
          ProgressBar1.Visible:=false;
          label2.Caption:='Lisans Sahibi :'+Sahip;
        end;
 finally
   r.free;
  end;
  End;



ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Lisanslama

Mesaj gönderen ozcank »

Şuan da herhangi bir hata da vermiyor ama ProgressBar1 30 gün kaldı mesajı vermeli onu vermiyor anlamadım bazen hata veriyor bazen vermiyor
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Lisanslama

Mesaj gönderen mrmarman »

TARIH değişkenini TRY bloğu dışında ilk değer atamamışsın.

TRY bloğu içerisinde olumsuz bir durum oluşursa bu değişken hiç değer alamayacak olacağından, finally'den sonra kullandığın için sorun yaşayabilirsin diyor.

Onun için öncelikle başlangıç değeri atamalısın. En azından procedure başında Tarih := NOW(); demen kafidir.
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Lisanslama

Mesaj gönderen mrmarman »

Tekrar baktım da Tarih'in ilk değeri NOW olmasın o zaman registry erişim olmadığında DEMO ama süresiz DEMO kullanım kazanmış olur. Begin'in hemen altına şöyle yaz.

Kod: Tümünü seç

  Tarih := EncodeDate( 2000, 1, 1 );
Böylece senin Tarih registry'den okunamazsa en azından 2000 yılı ocak 1 tarihi atanır da peşinen süre sona ermiş sayılır.
Resim
Resim ....Resim
Cevapla