Autor Tema: Cerrar Form después de cierto tiempo de inactividad  (Leído 13022 veces)

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

pedroesca

  • Megabyte
  • ***
  • Mensajes: 206
  • Reputación: +19/-0
  • "El conocimiento es libre"
    • Ver Perfil
Cerrar Form después de cierto tiempo de inactividad
« en: Noviembre 24, 2011, 10:15:02 pm »
Buenas y santas: alguien sabe, por esas casualidades cósmicas de la vida y del universo, como cerrar un formulario luego de cierto tiempo de inactividad??? es decir, luego de que no se haya efectuado clicks ni se hayan pulsado teclas, tanto en el form, como en sus controles....
Podrá ser posible esto?
"Si yo tengo una idea, tú otra, y la compartimos, ambos tendremos DOS ideas"

Virgil Tracy

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +38/-1
    • Ver Perfil
Re:Cerrar Form después de cierto tiempo de inactividad
« Respuesta #1 en: Noviembre 25, 2011, 04:53:03 am »
Con el api GetLastInputInfo se puede obtener el tiempo de la ultima actividad del teclado o el raton

Aqui un ejemplo de VBnet / Randy Birch

http://vbnet.mvps.org/code/system/getlastinputinfo.htm


pedroesca

  • Megabyte
  • ***
  • Mensajes: 206
  • Reputación: +19/-0
  • "El conocimiento es libre"
    • Ver Perfil
Re:Cerrar Form después de cierto tiempo de inactividad
« Respuesta #2 en: Noviembre 25, 2011, 07:44:42 am »
Solucioné el asunto utilizando las funciones SaveSetting y GetSetting.
Estas ambas funciones en un módulo bas
Código: (vb) [Seleccionar]
Public Function AppSet_GetLockTimeOut(Optional sUserName As String = "") As Integer
    Dim sValue As String
   
    sValue = GetSetting(App.Title, "settings", sUserName & "-LockTimeOut", 10)
   
    If IsNumeric(sValue) Then
        AppSet_GetLockTimeOut = Val(sValue)
    Else
        AppSet_GetLockTimeOut = 60
    End If
   
End Function

Public Function AppSet_SetLockTimeOut(Optional iNewLockTime As Integer = 60, Optional sUserName As String = "")
 
    If iNewLockTime < 60 Then iNewLockTime = 60
   
    SaveSetting App.Title, "settings", sUserName & "-LockTimeOut", Str(iNewLockTime)
   

End Function

Y en un timer colocado en el MDI de la aplicación, o en el form principal, lo siguiente:
Código: (vb) [Seleccionar]
Private Sub timerWatchCursor_Timer()

    Static ic As Integer
    Static op As POINTAPI
   
    Dim p As POINTAPI
   
    GetCursorPos p
    If (p.X < (op.X + 5) And p.X > op.X - 5) And (p.Y < (op.Y + 5) And p.Y > op.Y - 5) Then
        ic = ic + 1
    Else
        ic = 0
    End If
   
    op.X = p.X
    op.Y = p.Y

    If ic > AppSet_LockTimeOut Then
        ic = 0
        LockAPP
    End If

End Sub

Donde en el procedimiento "LockAPP" le decimos si queremos que cierre todo, muestre un protector de pantalla, o cierre la sesión, etc.

La verdad que no estoy seguro de guardar configuraciones mayores o preferencias de usuarios en el registro de windows.

Saludos.
« última modificación: Noviembre 25, 2011, 11:25:35 am por Mr. X »
"Si yo tengo una idea, tú otra, y la compartimos, ambos tendremos DOS ideas"

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Cerrar Form después de cierto tiempo de inactividad
« Respuesta #3 en: Noviembre 25, 2011, 11:10:26 am »
Con el api GetLastInputInfo se puede obtener el tiempo de la ultima actividad del teclado o el raton

Aqui un ejemplo de VBnet / Randy Birch

http://vbnet.mvps.org/code/system/getlastinputinfo.htm

eso esta bien para el sistema, el quiere para el formulario solo.

@pedroesca

guardalos en un .ini, es mejor que estar llenando el registro, asi hacen todos los programas para guardar configuraciones.

saludos.

79137913

  • Megabyte
  • ***
  • Mensajes: 185
  • Reputación: +21/-4
  • 4 Esquinas
    • Ver Perfil
    • Eco.Resumen Resumenes Cs. Economicas
Re:Cerrar Form después de cierto tiempo de inactividad
« Respuesta #4 en: Noviembre 25, 2011, 11:54:30 am »
HOLA!!!

Yo no me complicaria tanto...

Pone en el evento From_lostFocus()

TimerCerrar.enabled = true

en el evento Form_GotFocus()

TimerCerrar.Enabled = false

En el timercerrar

Unload Me

Mezclando este metodo con el api getlastinputinfo ya estaria solucionado tu problema

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*                                                          Resumenes Cs.Economicas

Virgil Tracy

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +38/-1
    • Ver Perfil
Re:Cerrar Form después de cierto tiempo de inactividad
« Respuesta #5 en: Noviembre 27, 2011, 11:21:02 pm »
Otra alternativa es la api GetQueueStatus

En FreeVbCode hay un ejemplo
http://www.freevbcode.com/ShowCode.asp?ID=3297