Кажется, вы ответили на свой вопрос, Натан ;-)
«GetLastInputInfo» - это путь.
Одна хитрость заключается в том, что если ваше приложение работает на настольном компьютере, а пользователь подключается к виртуальной машине, то GetLastInputInfo не сообщит об активности (поскольку на хост-компьютере нет активности).
Это может отличаться от желаемого поведения в зависимости от того, как вы хотите применить пользовательский ввод.