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.
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,