определение времени простоя с использованием python

Как определить, работает ли система в Windows с использованием Python (т.е. нет активности клавиатуры или мыши). Это уже задавали раньше , но в модуле pywin32 .

5 Solutions collect form web for “определение времени простоя с использованием python”

 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 

Позвоните get_idle_duration() чтобы получить время простоя в секундах.

Похоже, что GetLastInputInfo теперь доступен в pywin32:

 win32api.GetLastInputInfo() 

делает трюк и возвращает отметку таймера из последнего действия пользователя.

Здесь с примерной программой

 import time import win32api for i in range(10): print(win32api.GetLastInputInfo()) time.sleep(1) 

Если вы нажмете клавишу / перемещаете мышь во время спящего сценария, печатный номер изменяется.

Фактически, вы можете получить доступ к GetLastInputInfo через библиотеку cytpes :

 import ctypes GetLastInputInfo = ctypes.windll.User32.GetLastInputInfo # callable function pointer 

Это может быть не то, что вы хотите, хотя, поскольку оно не предоставляет простую информацию во всей системе, а только о сеансе, который вызвал эту функцию. См. Документы MSDN.

Кроме того, вы можете проверить, заблокирована ли система , или если заставка экрана была запущена.

 import win32api def getIdleTime(): return (win32api.GetTickCount() - win32api.GetLastInputInfo()) / 1000.0 

@ Ответ FogleBird довольно крут и работает, но спешил, я не был уверен, как это работает, поэтому здесь немного пример теста. Поток запускается, ища последний простоя каждые 10 секунд. Если в течение этого времени будет сделано какое-либо движение, оно будет распечатано.

 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() 
  • Использование struct как аргумент функции с модулем ctypes python
  • Переключение лотков для принтера
  • Ptyon ctypes: функция обратного вызова SetWindowsHookEx никогда не вызывалась
  • Более быстрый способ чтения пикселя экрана в Python, чем PIL?
  • Ctypes pro и con
  • Печать PDF-документа с помощью модуля win32print python?
  • Обнаружение выхода Windows в Python
  • Копировать изображение PIL / PILLOW в буфер обмена Windows
  • Получение WM_COPYDATA в Python
  • Ошибка при установке и запуске pywin32 2.7
  • Каков наилучший способ переноса данных из python в другое приложение в Windows?
  • Python - лучший язык программирования в мире.