Sobre Registro

Iniciado por Pitoniso, 10 Marzo 2006, 21:21 PM

0 Miembros y 1 Visitante están viendo este tema.

Pitoniso

Hola..Estoy haciendo un Formulario que cuando lo descargas comienza un conteo con un Timer para saber el tiempo que ha estado abierto el programa...Estoy trabado en la parte de meter el tiempo que consumio en el Registro y que se guarde ahi para que la proxima ves que se descargue el Formulario busque en el Registro el ultimo tiempo guardado y empieze a contar desde ahi... ;D...

Estoy trabado en la constante que debo utilizar....Pues probe con REG_SZ y me da ERROR....

Salu2

.Slasher-K.

Depende de cómo trates el tiempo. Una forma sería crear un Timer que aumente el valor de una variable cada un segundo, así podés guardar los datos como REG_DWORD.

Por ejemplo, cuando se inicia el programa lee la clave del registro para saber cuál fue el último valor del contador.


Function ReadUpTime() As Long
      Dim r&, hKey&
      Dim lLastTime&

  r = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\MyApp", 0&, vbNullString, 0&, KEY_ALL_ACCESS, 0&, hKey, REG_OPENED_EXISTING_KEY)
 
  If r = ERROR_SUCCESS Then
    r = RegQueryValueExInt(hKey, "LastTime", 0&, REG_DWORD, lLastTime, 4)
   
    ReadUpTime = lLastTime
   
    r = RegCloseKey(hKey)
  End If
End Function


Y para guardar el último valor del contador, sería casi lo mismo:


Function WriteUpTime(LastUptime As Long) As Boolean
      Dim r&, hKey&
      Dim lLastTime&

  r = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\MyApp", 0&, vbNullString, 0&, KEY_ALL_ACCESS, 0&, hKey, REG_OPENED_EXISTING_KEY)
 
  If r = ERROR_SUCCESS Then
    r = RegSetValueExInt(hKey, "LastTime", 0&, REG_DWORD, LastUptime, 4)
   
    WriteUpTime = (r = ERROR_SUCCESS)
   
    r = RegCloseKey(hKey)
  End If
End Function


Usá una variable global por ejemplo, y estableces el valor al inicio del formulario:


Private lUptime As Long

Private Sub Form_Load()
  lUptime = ReadUpTime
End Sub


Y cuando se descarga el formulario guardas el valor actual


Private Sub Form_Unload(Cancel As Integer)
  Call WriteUpTime(lUptime)
End Sub


Luego como te decía, el Timer aumentando el valor de la variable cada segundo:


Private Sub tmrUptime_Timer()
  lUptime = lUptime + 1
  lblUptime = "Tiempo desde el inicio de la aplicación: " & lUptime & " seg"
End Sub


Podrías usar las funciones de fecha y hora pero no podés saber si la fecha y hora del sistema están bien, de esta forma es relativo al programa.

Pitoniso

Mira estuve metiendole COCO a lo que me dijistes y hasta cierto punto entiendo, lo que no tengo bien claro es lo del ir aumentando la VARIABLE + 1.. Yo tengo el siguiente codigo que me hace un Contador.....Tienes que tener un label1....Aqui me empieza el conteo del tiempo...

Private Sub Form_Load()
    Label1.Caption = "00:00:00"
    Iniciar = Timer
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
    Dim dif As Single
    Dim horas As Integer
    Dim minutos As Integer
    Dim segundos As Integer
    Dim centesimas As Integer
   
    If Timer > Iniciar Then
        dif = Timer - Iniciar
    Else
        dif = 86400 - Iniciar + Timer
    End If
   
    centesimas = (dif - Fix(dif)) * 100
    horas = Fix(dif) \ 3600
    minutos = (Fix(dif) Mod 3600) \ 60
    segundos = (Fix(dif) Mod 60)
    Label1.Caption = Format(horas, "00") & ":" & Format(minutos, "00") & ":" & Format(segundos, "00")
    DoEvents
End Sub

Tambien me da este ERROR

Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))

Explicame si puedes... Thx

Pitoniso

Este es el Error que me da en la linea"Es necesaria una Expresion de Constante"

Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))

.Slasher-K.

Falta la constante STANDARD_RIGHTS_ALL, buscala en el Visor de API de Visual Basic.

Lo que decía de sumarle 1 a la variable, era para ir aumentando segundo por segundo el contador de tiempo, así no dependes de la función Timer ni de nada, que es algo variable.

Saludos.