Programm über Registry nach 5Tagen beenden

CrimeTime

Erfahrenes Mitglied
Hallo Leute,
ich möchte von euch gerne wissen wie ich am besten ein Programm nach 5Tagen über die Registry beenden kann, auch wenn man es erneut startet versteht sich.

hier mal nen Paar Code snippel

Code:
'registry functions
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hkey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hkey As Long) As Long
Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hkey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As Any) As Long
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hkey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, ByRef lpcbValueName As Long, ByVal lpReserved As Long, ByRef lpType As Long, ByRef lpData As Any, ByRef lpcbData As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hkey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hkey As Long, ByVal lpSubKey As String) As Long
Private Declare Function SHDeleteKey Lib "shlwapi.dll" Alias "SHDeleteKeyA" (ByVal hkey As Long, ByVal pszSubKey As String) As Long

Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const HKEY_CURRENT_USER = &H80000001
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const HKEY_USERS = &H80000003
Private Const HKEY_PERFORMANCE_DATA = &H80000004
Private Const HKEY_CURRENT_CONFIG = &H80000005
Private Const HKEY_DYN_DATA = &H80000006

Private Const ERROR_SUCCESS As Long = 0&
Private Const ERROR_CANTWRITE As Long = 1013&
Private Const ERROR_INVALID_PARAMETER As Long = 87
Private Const ERROR_NOT_CONNECTED As Long = 2250&
Private Const ERROR_ACCESS_DENIED As Long = 5&

Private Const KEY_CREATE_SUB_KEY As Long = &H4
Private Const KEY_ENUMERATE_SUB_KEYS As Long = &H8
Private Const KEY_QUERY_VALUE As Long = &H1
Private Const KEY_SET_VALUE As Long = &H2
Private Const KEY_NOTIFY As Long = &H10

Private Const REG_NONE = 0
Private Const REG_SZ = 1
Private Const REG_EXPAND_SZ = 2
Private Const REG_BINARY = 3
Private Const REG_DWORD = 4
Private Const REG_DWORD_BIG_ENDIAN = 5
Private Const REG_LINK = 6
Private Const REG_MULTI_SZ = 7


*   Sub REG_EnumUSBDevices()
*   Dim Key As String, lCount As Byte, lResult As Long, hkey As Long

*   lResult = RegOpenKeyExv(HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Enum", 0, KEY_ENUMERATE_SUB_KEYS, hkey)
*   If Not (lResult = ERROR_SUCCESS) Then Exit Sub

*   lCount = 0
*   Do
*   Key = Space(1024)
*   lResult = RegEnumKeyEx(hkey, lCount, Key, Len(Key), 0, vbNullString, 0, 0)
*   If lResult = ERROR_SUCCESS Then
*   Key = Trim(Key)
*   Debug.Print (Left(Key, Len(Key) - 1))
*   End If
*   lCount = lCount + 1
*   Loop Until Not (lResult = ERROR_SUCCESS)
*   End Sub
´


* = Beispiel / Nicht nützlich


/Project Infos:

Also ich Arbeite im moment an einem License System, nun liegt ein kleines Problem, wenn man Auf Trail drückt, soll er in die Registry was rein fuddeln, des das Programm nach 5Tagen sich selbst beendet, und dann nach möglichkeit sich nicht mehr öffnen lässt, dies lässt sich ja nach dieses registry Werts Prüfen

( Private Sub Form_Load()
If Registrykeywert = 0 Then
Unload Me
Else
FrmMain.Show
Unload Me
End Sub).



Gruß CrimeTime :)
 
Zuletzt bearbeitet:
Hallo,

wo liegt genau Dein Problem?

Im Prinzip musst Du doch nur beim allerersten Programmaufruf das aktuelle Datum, eventuell in verschlüsselter Form, in die Registry schreiben. Dann baust Du einen Timer ein, der einerseits ein möglichstgroßes Interval hat, und den Du dann über einen internen Zähler noch zusätzlich bremsen kannst (damit er nicht permanent in der Registry rumkraddeln muss). Im folgenden Beispiel habe ich den Timer-Interval auf 30000 gestellt (Interval ist ein Integerwert), d.h. der Timer wird alle 30 Sekunden aufgerufen. Damit nun nicht alle 30 Sekunden in der Registry gelesen wird, liest er nur jedes 2400. mal, das wären nach meiner Berechnung alle 12 Stunden.

Code:
Private Abfrage As Integer

Private Sub Timer1_Timer()
   If Abfrage < 2400 Then
      Abfrage = Abfrage + 1
   Else
      'hier nun die Registry-Prüfung
      'und der Datumsvergleich
      If RegistryPruefung Then
          Abfrage = 0
      Else
          End
      End if
   End If
End Sub

Für RegistryPruefung (hier im Beispiel) bastelst Du Dir am besten eine separate Funktion, die den Registry-Wert einliest, mit Datevalue kannst Du dann die Werte vergleichen, und, wenn weniger als 5 Tage gelaufen, den Rückgabewert auf True, sonst auf False setzt.

Diese Funktion rufst Du auch beim Programmstart auf, und falls der Rückgabewert False ist, das Programm gleich wieder beendest.

Die API-Funktionen für das Registry-Schreiben und -Lesen hast Du Dir ja schon zusammen gesucht.

Oder liegt Dein Problem im Lesen/Schreiben der API?

Grüsse
ronaldh
 
Die Registry ist nur eine Datensammlung, die ist nicht für Programmsteuerung zuständig.

Also -> In Deinem Programm, wie mein Vorredner schon sagte, ist Anfangs die Abfrage, wann das Programm installiert wurde. Diesen Wert musst Du bei der Installation in die Registry schreiben.

Ist also der Wert in der Registry läger als 5 Tage her, bricht das Programm ab. Aber das ist recht schnell zu durchschauen, deswegen würde ich das kombinieren mit der Abfrage, wann die Datei erstellt wurde ( da ist das Erstellungsdatum auch gespeichert ) und möglicherweise auch mit einem ominösen Code, der in der Registry steht, der sich aus Registry-Datum und Datei-Erstellungsdatum errechnet.

Sind alle Werte OK, wird das Programm gestartet.

mfg chmee
 
Dann kannst Du

1. in die Registry schauen, ob Du schon Daten hinterlegt hast. Wenn nicht, scheint es der erste Start zu sein und Du schreibst eben Jene in die Registry.

2. Bleibt auch noch die Datei-Info, wann diese Datei auf der Festplatte ( oder wo auch immer ) erstellt wurde.

mfg chmee
 

Neue Beiträge

Zurück