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!