Bloquear la aplicación después de un cierto tiempo

Soy nuevo en esta página y quería ver si alguien me podría ayudar, resulta que estoy realizando una aplicación en VB 6.0 y me gustaría que cuando el programa este cargado y pasa un cierto tiempo por ejemplo unos 10 min. Sin que el usuario este interactuando con el este quede bloqueado por decirlo de alguna manera y cuando el usuario quiera utilizarlo este le pida nuevamente el código de acceso. Lo que quiero lograr es algo parecido a lo que hace el Sistema operativo que cuando el usuario no esta realizando ninguna tarea este se bloquea (Por decirlo de alguna manera). Ojala me puedan ayudar en esto que quiero hacer porque no se me ocurre como lograrlo.
Respuesta

Se me bloquea en el momento de ejecutar, pero una vez pasado la cantida de segundos no se vuelve a activar. ¿Cómo lo soluciono?

1 respuesta más de otro experto

Respuesta
1
Te comento una forma que utilizo para esperar cierto tiempo, antes de cualquier acción, es un procedimiento al cual le pasas un parámetro en segundos, los cuales realiza una acción determinadas veces, según le indiquemos, obvio, este procedimiento está continuamente trabajando, por lo tanto, llevará un DoEvents entre medio para que te deje Realizar otras acciones:
Public Sub Esperar(Segundos As Single)
Dim SegundosFin As Single
Dim SegundosComienzo As Single
ComienzoSeg = Timer
SegundosFin = SegundosComienzo + Segundos
Do While FinSeg > Timer
   DoEvents
   If SegundosComienzo > Timer Then
      SegundosFin = SegundosFin - 24 * 60 * 60
   End If
Loop
End Sub

Desde tu formulario lo llamas así : Esperar (1500)
un ejemplo:
Variable Publica para controlar que si se realiza alguna acción en el programa éste NO se trabe al finalizar la espera, o sea, tu marcas 10 minutos verdad, el usuario a los 8 minutos interactúa con el programa, entonces debes resetear el contador a 0, para que comience de nuevo:
Dim Detener as Boolean

Private Sub Command1_Click()
Dim x As Integer
Dim Seguir As Boolean
For x = 0 To 50
      If Seguir = False Then
         Esperar (1500)
         Seguir = True
      End if
Next x
End Sub

Como verás si la variable está en False esperará 1500 segundos para continuar.
Ahora un ejemplo con lo que tu necesitas:
Colocaré el ejemplo presionando un botón, pero tu lo colocarás de la forma que desees, si después de una función o cuando apenas empiece el programa etc.

Private Sub Command1_Click()
Detener = False
Esperar (1500) 'Que espere 1500 segundos antes de Bloquear el form
Me.Enabled = False 'Bloqueamos el Formulario
End Sub

El procedimiento de arriba es el estándar, tu utiliza este :
Public Sub Esperar(Segundos As Single)
Dim SegundosFin As Single
Dim SegundosComienzo As Single
ComienzoSeg = Timer
SegundosFin = SegundosComienzo + Segundos
Do While FinSeg > Timer
   DoEvents
   If Detener = True Then Exit Sub 'Si está en true se detiene
   If SegundosComienzo > Timer Then
      SegundosFin = SegundosFin - 24 * 60 * 60
   End If
Loop
End Sub

Como detendrás el contador, y en el momento de trabarlo, ¿lo vuelves a ejecutar? De esta forma:
Supongamos que el usuario presiona un boton que calcula una suma:
Private Sub Sumar_Click()
Dim Num1 As Integer
Dim Num2 As Integer
Dim Total As Long

Detener = True
Call Command1_Click' Aqui debe ir lo que inicia el contador, por ejemplo
' un procedimiento que defines tu (es lo que te recomiendo para iniciarlo, y asi poder
'Resetearlo)
Total = Num1 + Num2
End sub

Te dejo el ejemplo que hice, cuando el usuario presiona y resetea el contador, vuelve a llamar a este procedimiento:
Private Sub Command1_Click()
Detener = False
Espera (5)
Me.Enabled = False
End Sub

Tal vez te cause algo de mareo, a veces trato de explicar las cosas y las entrevero y explico demasiado, por eso si no entiendes, te lo vuelvo a explicar, pero quedate tranquilo que funciona,
Tuve un error en el procedimiento cuando lo escribí, eso pasa por apurado, disculpame... es así..
Public Sub Esperar(Segundos As Single)
Dim SegundosFin As Single
Dim SegundosComienzo As Single
SegundosComienzo = Timer
SegundosFin = SegundosComienzo + Segundos
Do While FinSeg > Timer
   DoEvents
   If SegundosComienzo > Timer Then
      SegundosFin = SegundosFin - 24 * 60 * 60
   End If
Loop
End Sub

Acomodalo, porque le erre al primero y de ahí solo copie y pegue, por eso los demás también están errados,

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas