обнаружение времени простоя с помощью Python

Совершенно нормально звонить FB.login с помощью обратного вызова FB.getLoginStatus, если вы уверены, что статус входа в систему уже был загружен внутри страны. Для этого воспользуйтесь одним из них:

  • FB.init({..., status: true, ... }).
  • FB.getLoginStatus(...)
  • FB.login(...)
  • FB.ui(...)

Технически все эти опции используют FB.ui. Асинхронный процесс должен завершиться, что может занять несколько секунд. До тех пор, пока вы уже использовали один из методов выше, чтобы сделать междоменный вызов с FB, и этот асинхронный процесс завершен, получение статуса входа в систему не сделает асинхронный вызов, и всплывающее окно не будет заблокировано. ]

Также следует убедиться, что не указывает true для второго параметра, как в FB.getLoginStatus(..., true);.

22
задан Community 23 May 2017 в 12:13
поделиться

3 ответа

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 () , чтобы узнать время простоя в секундах.

23
ответ дан 29 November 2019 в 04:47
поделиться

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

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

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

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

2
ответ дан 29 November 2019 в 04:47
поделиться

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

win32api.GetLastInputInfo()

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

Вот пример программы

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

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

8
ответ дан 29 November 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: