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
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.
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(http://C:%5CDocuments%20and%20Settings%5CYamila%5CMis%20documentos%5CMis%20im%C3%A1genes%5CError.bmp)
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
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))
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.