определение времени простоя с использованием 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() 
  • Как извлечь выделенный текст из активного окна
  • Экспорт диаграмм из Excel в виде изображений с использованием Python
  • Служба Python win32
  • Image.frombuffer с 16-битными данными изображения
  • Как использовать winapi SetWinEventHook в python?
  • Показать диалоговое окно свойств проводника для файла в Windows
  • Использование sys.stdin в select.select в Windows
  • Windows назвала каналы на практике
  • Python - лучший язык программирования в мире.