Я пытаюсь написать небольшую программу для отслеживания бездействия пользователя и примерно через 30 минут убить все запущенные приложения Adobe Reader на компьютере с Windows 7. Программное обеспечение Paychex, которое мы используем, не позволяет открывать более одной платежной квитанции одновременно, поэтому, если они не закрыты, и следующий сотрудник приходит использовать компьютер, они не могут просмотреть свою платежную квитанцию.
Может быть, это проще, используя командный файл или сценарии, но я достаточно хорошо знаю C ++, поэтому я начал с него.
Обнаружение, что Windows бездействует, является самой трудной частью, но к счастью у вас есть Windows 7 и вы можете использовать IIdleTrigger
.
После этого достаточно отправить сообщение о закрытии окна в Adobe Reader. Ищите заголовок, который включает название платежной квитанции, чтобы вы закрыли нужный экземпляр.
Обнаружение, что Windows бездействует, является самой трудной частью
На самом деле это очень легко. Ты можешь использовать Функция GetLastInputInfo. Это фрагмент из программы, которую я создал, которая делает именно это:
unsigned idle_time;
// get idle time
LASTINPUTINFO last_input_info;
DWORD this_time;
last_input_info.cbSize = sizeof(LASTINPUTINFO);
GetLastInputInfo(&last_input_info);
#pragma warning(suppress: 28159) // Consider using GetTickCount64() instead
this_time = GetTickCount();
idle_time = this_time - last_input_info.dwTime;
Обратите внимание, что это не на основе событий. Вы должны поместить это в цикл и использовать Спать время от времени проверять время простоя, в зависимости от того, как часто вам нужно. Из того, что вы описываете, что-то вроде каждые несколько секунд должно быть в порядке.