Обнаружение простоя пользователя

Я хочу обнаружить обнаружение простоя пользователя в С++. Я использовал этот winapi:

LASTINPUTINFO last_input;
last_input.cbSize = sizeof(LASTINPUTINFO);
last_input.dwTime = 0;
GetLastInputInfo(&last_input)

эти методы правильно работают с пользовательским вводом, таким как (мышь и клавиатура), но когда я смотрю фильм, эти методы возвращают неправильный счетчик тиков, я хочу, как заставка Windows, которая точно определяет активность пользователя, например (смотреть фильм, мышь и клавиатура), как я могу это сделать это спасибо


person Raol    schedule 11.01.2021    source источник
comment
Это не заставка, которая определяет, что фильм просматривается. Это видеоплеер, который сообщает хранителю экрана, что он должен быть запрещен, не передавая сообщение WM_SYSCOMMAND / SC_SCREENSAVER в DefWindowProc docs.microsoft.com/en-us/windows/win32/lwef/   -  person datenwolf    schedule 11.01.2021
comment
@datenwolf Видеоплеер предпочтительно должен использовать SetThreadExecutionState() вместо того, чтобы сообщить Windows, что требуется отображение экрана, поэтому Windows вообще не пытается вызвать заставку. См. Критерии спящего режима.   -  person Remy Lebeau    schedule 11.01.2021


Ответы (1)


Если вы хотите обнаружить бездействие пользователя, фактически не ввод пользователя, не требуется отображение, вы можете определить, работает ли в данный момент экранная заставка, используя SPI_GETSCREENSAVERRUNNING.

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

Дополнительные ссылки: Критерии спящего режима системы, SystemParametersInfo() .

person Rita Han    schedule 12.01.2021