¿Cómo puedo detectar si el sistema está inactivo en Windows usando Python (es decir, sin actividad de teclado o mouse)? Esto ya se ha pedido before, pero no parece haber un GetLastInputInfo
en el módulo pywin32
.detectando el tiempo de inactividad usando python
Respuesta
En realidad, puede acceder a GetLastInputInfo
a través de la cytpes
biblioteca:
import ctypes
GetLastInputInfo = ctypes.windll.User32.GetLastInputInfo # callable function pointer
Esto podría no ser lo que quiere, sin embargo, ya que no proporciona información de estado libre en todo el sistema, pero sólo alrededor de la sesión que llama la función. See MSDN docs.
Como alternativa, podría check if the system is locked, o si se ha iniciado el protector de pantalla.
from ctypes import Structure, windll, c_uint, sizeof, byref
class LASTINPUTINFO(Structure):
_fields_ = [
('cbSize', c_uint),
('dwTime', c_uint),
]
def get_idle_duration():
lastInputInfo = LASTINPUTINFO()
lastInputInfo.cbSize = sizeof(lastInputInfo)
windll.user32.GetLastInputInfo(byref(lastInputInfo))
millis = windll.kernel32.GetTickCount() - lastInputInfo.dwTime
return millis/1000.0
Llame al get_idle_duration()
para obtener tiempo de inactividad en segundos.
parece que GetLastInputInfo
ya está disponible en pywin32:
win32api.GetLastInputInfo()
hace el truco y devuelve el paso del temporizador de la última acción de entrada del usuario.
Aquí con un programa de ejemplo
import time
import win32api
for i in range(10):
print(win32api.GetLastInputInfo())
time.sleep(1)
Si se presiona una tecla/mueve el ratón mientras el guión duerme, los cambios de número de impresos.
@ La respuesta de FogleBird es muy buena y funciona, pero no estaba seguro de cómo funciona, así que un pequeño ejemplo de prueba aquí. Se está iniciando un hilo, buscando el último tiempo de inactividad cada 10 segundos. Si se realiza algún movimiento dentro de esta ventana de tiempo, se imprimirá.
from ctypes import Structure, windll, c_uint, sizeof, byref
import threading
//Print out every n seconds the idle time, when moving mouse, this should be < 10
def printit():
threading.Timer(10.0, printit).start()
print get_idle_duration()
class LASTINPUTINFO(Structure):
_fields_ = [
('cbSize', c_uint),
('dwTime', c_uint),
]
def get_idle_duration():
lastInputInfo = LASTINPUTINFO()
lastInputInfo.cbSize = sizeof(lastInputInfo)
windll.user32.GetLastInputInfo(byref(lastInputInfo))
millis = windll.kernel32.GetTickCount() - lastInputInfo.dwTime
return millis/1000.0
printit()
import win32api
def getIdleTime():
return (win32api.GetTickCount() - win32api.GetLastInputInfo())/1000.0
- 1. VB Detecta el tiempo de inactividad
- 2. Obtener inactividad/tiempo de inactividad en una aplicación WPF
- 3. WPF: tiempo de inactividad de la aplicación
- 4. Prueba de inactividad en Python en Mac
- 5. Tiempo de inactividad de actividad para ActivityRecord
- 6. iPhone: La detección de inactividad de usuario/tiempo de inactividad desde el toque última pantalla
- 7. Detectando IE6 usando jQuery.support
- 8. Tiempo de inactividad al volver a cargar mod_wsgi daemon?
- 9. Tiempo de espera de conexión después del período de inactividad
- 10. detectando un tiempo de espera en ffmpeg
- 11. Parámetro de tiempo de inactividad IDLE en Oracle
- 12. Tiempo de inactividad de la actividad para HistoryRecord?
- 13. Despliegue en caliente en Heroku sin tiempo de inactividad
- 14. MySql - crear replicación con tiempo de inactividad mínimo
- 15. Implementación del tiempo de inactividad cero para aplicaciones Java
- 16. La conexión se bloquea después del tiempo de inactividad
- 17. Detectando HTTP close usando inet
- 18. Algoritmo para encontrar el tiempo de inactividad total dado el conjunto de horas de inicio/finalización
- 19. ¿Cómo puedo determinar el tiempo de inactividad de la pantalla desde Python en Windows, Linux y MacOS?
- 20. Cero tiempo de inactividad (o cerca de cero) Cambios en el esquema db
- 21. Detección de inactividad del sistema
- 22. detectando typedef en tiempo de compilación (metaprogramación de plantillas)
- 23. ¿Cómo abordar el tiempo de inactividad de los proveedores de OpenID?
- 24. ¿Qué causaría que el tiempo de inactividad de php no funcione para una fecha en 2099?
- 25. Ocultar el cursor del mouse después de un tiempo de inactividad
- 26. ¿Qué debería hacer el programa C en tiempo de inactividad cuando se ejecuta en Linux?
- 27. WPF inactividad y actividad
- 28. Detectando transacciones olvidadas de SQLite en Android usando StrictMode?
- 29. Detectando el desplazamiento de UITableView
- 30. Detectando el tipo de interrupción de iPhone
Desde que se preguntó antes, ¿por qué lo preguntas de nuevo? ¿Qué crees que ha cambiado que dará una respuesta diferente? –
Quizás haya alguien alrededor que pueda responderlo, pero la vieja pregunta está oculta por la edad y la oscuridad. ¿Cómo puedes "superar" la vieja pregunta de otra persona? –
cuando se le preguntó anteriormente, la respuesta fue sobre la detección de clics del mouse, que no estaba ni remotamente a la respuesta a esa pregunta. – Badri