Como saber cuando no hay actividad en el ordenador

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
nekonos
Mensajes: 10
Registrado: 04 Abr 2009, 23:32

Como saber cuando no hay actividad en el ordenador

Mensaje por nekonos »

Buenas noches me estoy rompiendo un poco los cuernos.
Quiero que un codigo se ejecute cuando no se mueva el raton desde hace x segundos y no se por donde sacarlo.

Lo que quiero es si no se mueve el raton en 20 seg entre en un bucle y que salga del bucle si detecta un click.

Encontre esta funcion de chefito

Código: Seleccionar todo

; Función que indica si se mueve el cursor del ratón.

Func SeMueveRaton()

   If not $coordx<>$mpos[0] Or $coordy<>$mpos[1] Then   ;Si cambian las coordenadas x o y del cursor entra en el if.

      $coordx=$mpos[0]

      $coordy=$mpos[1]

      Velautomatica()

   EndIf

EndFunc
No se si se puede distingir los cliks de un usuario respecto los de autoit. Tambien he pensado en la opcion que mira la actividad de windows no se como se llama el que lanza el salvapantallas.

Dadme un poco de luz plis :smt039

Gracias!1!
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Como saber cuando no hay actividad en el ordenador

Mensaje por Ximorro »

En Windows hay una función que te dice el tiempo que el usuario ha estado "sin hacer nada", probablemente es eso lo que usa el salvapantallas y programas así, es GetLastInputInfo y está en user32.dll.

En este comentario del foro inglés hay un programita que lo usa, en este caso te muestra por consola el tiempo que el usuario ha estado inactivo.
http://www.autoitscript.com/forum/index ... t&p=613141

Cada vez que te mueves, cliqueas, etc, sale en la consola un mensaje del tipo:
21/10/2009 13:37:54 usuario was inactive 6 seconds

"usuario" es el nombre de usuario de windows.

Ahora mismo no tengo tiempo para analizarlo en detalle (pero lo he ejecutado para ver si te va a servir). Una opción es extraer de ahí lo que necesitas, pero sigue leyendo...

Si no te manejas bien con esto de las estructuras y funciones de la API (la verdad es que puede ser bastante lioso), fíjate en el comentario #20 en el mismo post. Hay una función en Timers.au3 que hace eso mismo: _Timer_GetIdleTime()... es más, ¡creo que ese programita es el que quieres!. Ahí cuando el usuario está más de 15 segs (15000ms) sin hacer nada manda un mensaje a la consola, en vez de ese ConsoleWrite haces la llamada a tu función.

Puedes ir al enlace que te he puesto para verlo todo, como es corto te copio aquí ese último código por si te es más cómodo:

Código: Seleccionar todo

#include <Timers.au3>



HotKeySet("{ESC}", "_Quit")



$IdleMinimum = 15000; Idle time in milliseconds



While 1

    If _Timer_GetIdleTime() >= $IdleMinimum Then

        ConsoleWrite("User inputs idle longer than " & $IdleMinimum & "ms = GO!" & @LF)

        Do

            Sleep(20)

        Until _Timer_GetIdleTime() < $IdleMinimum

    EndIf

    Sleep(20)

WEnd



Func _Quit()

    Exit

EndFunc  ;==>_Quit

 
¡Saludos!
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Responder