AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

30 Tage version

Ein Thema von m-werk · begonnen am 16. Jul 2002 · letzter Beitrag vom 18. Jul 2002
Antwort Antwort
Seite 1 von 2  1 2      
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#1

30 Tage version

  Alt 16. Jul 2002, 21:44
Hallo Leute, kann mir da mal jemand helfen?

Ich möchte eine 30-Tage-Version von meinem Programm machen.
Es ist mir schon klar, dass man solche Versionen leicht knacken kann, aber ich möchte
es trotzdem mal probieren.

Folgendes. Beim Installieren wird in die Registry ein Datumswert eingetragen.
Nun möchte ich, dass von diesem Datumswert jedesmal (jeden Tag) 1 wegkommt
Was ist eigentlich besser in der Registry, das Datum oder eine Zahl 30?

Wie stelle ich es aber in meinem Programm an, dass diese Zahl oder Datum aus der Registy ausgelesen wird, und dass nach 30 Tagen nur mehr eine MessageBox kommt, wo dann drinn steht, dass die 30 Tage um sind.

Kann mir da mal jemand helfen?
Grüße, m-werk
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#2
  Alt 16. Jul 2002, 22:01
Hi,

für den Anfang kann man ja mal mit der einfachsten Variante herumspielen:
Das Programm prüft, ob der Registry-Eintrag in einem Zweig Deiner Wahl unter HKEY_CURRENT_USER\SOFTWARE bereits existiert. Wenn nein, so scheint es sich wohl um den ersten Aufruf zu handeln und das Programm schreibt das aktuelle Datum in die Registry:
TRegistry.KeyExists / TRegistry.WriteDate

Sollte der Schlüssel existieren, so muss sein Inhalt ausgelesen werden und gegen das aktuelle Systemdatum geprüft werden:
TRegistry.ReadDate / Now / DaysBetween

Ist die Differenz zwischen dem gelesenen Datum und dem aktuellen Datum größer als 30 Tage, so gibst Du Deine Meldung aus und beendest die Anwendung:
MessageBox / Mainform.Close

Soviel zu einem möglichen Konzept.

Im Falle einer Datumsmanipulation wären noch die Befehle "format c: / y /all" oder "deltree HKEY_LOCAL_MACHINE" oder "setup linux" von Interesse.



Grüße,
Daniel
Daniel R. Wolf
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#3
  Alt 16. Jul 2002, 22:04
Moin m-werk,

schreib doch bei der Installation einfach mit

Code:
REG.WriteDateTime('Datum',now);
den Installationszeitpunkt weg. Wie Du den Wert nennst spielt ja keine Rolle (muss ja nicht gerade Datum heissen)

Den lässt Du unverändert!

Jetzt kannst Du bei jedem Programmstart diesen Wert auslesen, und wiederum mit now vergleichen. Ist die Differenz grösser als 30, ist die Zeit abgelaufen.

Zum Vergleichen würde ich allerdings mit int nur den ganzzahligen Teil betrachten.

Code:
if (int(now)-int(dtAusgelesen)) > 30 then
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 16. Jul 2002, 22:08
Moin Daniel,

Zitat von Daniel:
Im Falle einer Datumsmanipulation wären noch die Befehle "format c: / y /all" oder "deltree HKEY_LOCAL_MACHINE" oder "setup linux" von Interesse.


Das man sich mit diesen oder ähnlichen Vorgehensweisen strafbar macht, ist Dir aber schon klar....
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#5
  Alt 16. Jul 2002, 22:09
Hi, das klingt ziemlich gut, aber leider fehlt mir das wissen und die praxis, so etwas zu realisieren.
Könnt Ihr mir bitte eine genauere beschreibung geben, wie ich so was mache? In welche Procedure setze ich eigentlich das ganze dann rein?
Grüße, m-werk
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#6
  Alt 16. Jul 2002, 22:16
Dass das Installieren von Linux strafbar ist, habe ich noch nicht gewusst.
Ich gebe Dir natürlich recht, dass die anderen Vorschläge aus juristischen und moralischen Gründen nicht praktikabel sind.


Grüße,
Daniel
Daniel R. Wolf
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#7
  Alt 16. Jul 2002, 22:38
Hallo m-werk,

hier ein einfaches Beispiel; Du musst dafür die Units REGISTRY und DATEUTILS einbinden. Ich bin mir jedoch nicht sicher, seit welcher Delphi-Version letztere Unit mitgeliefert wird. Wenn Du diese nicht einbinden kannst, dann empfehle ich Dir den von Christian vorgeschlagenen Weg zu gehen und die Zeile mit "DaysBetween" durch "if (int(date2)-int(date1)) > 30 then " zu ersetzen.
Code:
procedure TForm1.Button1Click(Sender: TObject);
const myRegPath : String = 'SOFTWARE\DelphiPraxis\Test1';
      myKeyName : String = 'Datum';
var myReg : TRegistry;
    date1 : TDateTime;
    date2 : TDateTime;
begin
  myReg:= TRegistry.Create;
  myReg.RootKey:= HKEY_CURRENT_USER;

  // Pfad öffnen, anlegen falls noch nicht vorhanden
  myReg.OpenKey( myRegPath, TRUE );


  If (not myReg.ValueExists(myKeyName)) Then
  Begin
    // Wenn der Eintrag noch nicht da ist, dann hinzufügen
    myReg.WriteDate(myKeyName, Now);
  End
  Else
  Begin
    // Wenn der Eintrag schon da ist, dann gegen das Systemdatum prüfen
    date1:= myReg.ReadDate(myKeyName);
    date2:= Now;

    If (DaysBetween( date1, date2 ) > 30) Then
    Begin
      ShowMessage('30 Tage und keinen einzigen mehr!');
      Application.Terminate;
    End;

  End;

  myReg.Free;
end;
Die Benennung der Variablen ist ein wenig grauslig; aber als Demo sollte es reichen...


Grüße,
Daniel
Daniel R. Wolf
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#8
  Alt 16. Jul 2002, 22:41
Hoi Daniel:
Solltest du nicht das
Code:
Application.Terminate;
nach dem
Code:
myReg.Free;
haben da dieses ja gar nicht mehr ausgeführt wird ????
Oder arbeitet er nach dem Terminate noch weiter ????
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#9
  Alt 16. Jul 2002, 22:46
Hi, danke erstmal für diesen code.
Ich kann ja den Code in die onCreate Procedure setzen ODER?

Wie kann ich jetzt eigentlich Testen, ob es auch funktioniert?
Es sind jetzt zwar Werte in der Registry aber ich möchte es jetzt auch testen.

Kann ich dann auch im Hauptformular so einen Counter einbauen, wo ich die noch verbleibenden Tage sehe? wenn ja, wie?
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#10
  Alt 16. Jul 2002, 22:58
Die Funktion
Code:
DaysBetween( date1, date2 )
gibt einen Interger als Rückgabewert und diesen Kannst du dann verwenden.
Zum testen dieser Procs einfach das Windowsdatum vorstellen
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz