• Domingo 22 de Diciembre de 2024, 13:11

Autor Tema:  Re: version demo  (Leído 1196 veces)

bea

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: version demo
« en: Miércoles 3 de Septiembre de 2003, 23:33 »
0
Hola
Alguien sabe como se hace una version demo que dure un determinado tiempo y luego caduca. He oido que es por el registro pero no se como.

Muchas gracias

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: version demo
« Respuesta #1 en: Jueves 4 de Septiembre de 2003, 10:12 »
0
Podrías utilizar algo tal que así:

Para el ejemplo, crea un formulario y añádele dos 'CommandButton', uno para crear la clave en el registro y otro para comprobarla. Luego añade este código al form.

********************************************************************************
Option Explicit
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const REG_SZ = 1
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
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 RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Const NUMERO_DESPISTE = 32 'Por ejemplo
Private Const DIAS_PLAZO = 30 'También por ejemplo
Private Sub Command1_Click()
    RegistrarClaveSetup ValorClaveSetup()
End Sub
Private Sub Command2_Click()
    ChkClaveSetup
End Sub
Private Function ValorClaveSetup() As Long
    ValorClaveSetup = (Year(Now) + NUMERO_DESPISTE) * 10000& _
    + (Month(Now) + NUMERO_DESPISTE) * 100& + Day(Now) + NUMERO_DESPISTE
End Function
Private Sub RegistrarClaveSetup(ByVal Clave As String)
    Dim lngRc As Long, lngResult As Long
    lngRc = RegOpenKey(HKEY_LOCAL_MACHINE, "Software", lngResult)
    lngRc = RegCloseKey(lngResult)
    lngRc = RegCreateKey(lngResult, "SoftwareDeBea", lngResult)
    lngRc = RegCreateKey(lngResult, "AplicacionDeBea", lngResult)
    lngRc = RegSetValue(lngResult, "", REG_SZ, Clave, 0)
End Sub
Private Sub ChkClaveSetup()
    Dim strClave As String
    Dim intDia As Integer, intMes As Integer, intAnho As Integer
    strClave = RecuperarClaveSetup
    If Len(strClave) <> 8 Then
        MsgBox "Clave no válida"
        Exit Sub
    End If
    intAnho = Val(Left(strClave, 4)) - NUMERO_DESPISTE
    intMes = Val(Mid(strClave, 5, 2)) - NUMERO_DESPISTE
    intDia = Val(Right(strClave, 2)) - NUMERO_DESPISTE
    If DateDiff("d", Now, intDia & "/" & intMes & "/" & intAnho) <= DIAS_PLAZO Then
        MsgBox "Dentro del plazo"
    Else
        MsgBox "Plazo expirado"
    End If
End Sub
Private Function RecuperarClaveSetup() As String
    Dim lngRc As Long, lngResult As Long, strValor As String
    lngRc = RegOpenKey(HKEY_LOCAL_MACHINE, "Software", lngResult)
    lngRc = RegCloseKey(lngResult)
    lngRc = RegOpenKey(lngResult, "SoftwareDeBea", lngResult)
    strValor = String(255, 0)
    lngRc = RegQueryValue(lngResult, "AplicacionDeBea", strValor, 255)
    lngRc = RegCloseKey(lngResult)
    RecuperarClaveSetup = Left(strValor, InStr(1, strValor, Chr(0)) - 1)
End Function
********************************************************************************

Bueno, el ejemplo básicamente recupera la fecha actual y la pone como
aaaammdd tras sumarle un número (NUMERO_DESPISTE) a cada parte para que el valor en el registro no parezca una fecha (te podrías currar otro camuflage...). Escribes el valor camuflado en el registro en 'HKEY_LOCAL_MACHINE/SOFTWARE/SOFTWAREDEBEA/APLICACIONDEBEA'. Luego cuando quieras recuperas ese valor y le restas el número para convertirlo otra vez a fecha. Utilizas 'DateDiff' para conocer los días que han pasado.

Esto así a grandes rasgos... Examina el código y adáptalo a tus necesidades. También te tengo que decir que este método es un poco ingenuo y tal vez relativamente fácil de crackear, pero puede ser efectivo. Un consejo es que cambies los nombres de variables, funciones, métodos, etc., para que no parezca que son lo que son...

Suerte.

bea

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
version demo
« Respuesta #2 en: Jueves 4 de Septiembre de 2003, 12:11 »
0
Oye muchas gracias por tu ayuda eh. Lo del otro dia del winsock ya me salio, muchas gracias. Ahora voy a ver que tal se da esto de las versiones demo.

Hasta la proxima
Chao:gracias: