Я использую приложение для настольных компьютеров, которое должно записывать имена и время программ, которые пользователь открывает на ПК. Это приложение C# (WPF), которое запускается, когда пользователь входит в систему и запускается без пользовательского интерфейса. Для таких программ, как Word или IE, он также фиксирует, какой документ или URL они просматривают.Как отслеживать открытие приложения?
В настоящее время у меня есть рабочий раствор следующим образом:
Установите крюк для Windows для мыши. Когда это событие срабатывает, я использую p-Invoke для «GetForegroundWindow», а затем использую дескриптор окна для «GetWindowThreadProcessId», а ProcessId могу получить объект System.Diagnostics.Process, содержащий имя, время начала и начало списка аргументов. Я сохраняю список истории, поэтому я пишу только запись отслеживания, если эта комбинация дескрипторов process/dd не была записана ранее.
Это решение работает нормально, но требует крючка для мыши, который может быть удален Windows без какого-либо уведомления или возможности проблемно проверить, все ли подключено. Не говоря уже о том, что эта реализация кажется взломанной.
Если есть более простой подход, проконсультируйтесь.
Спасибо.
Почему бы не прочь с крюком мыши и просто использовать таймер #? – Blorgbeard
похоже, что вы предлагаете опрос? Это моя стратегия резервного копирования, но не знаю, будет ли это ресурсоемкой, поскольку мне нужно будет опросить каждую секунду, чтобы получить надежные результаты. Тогда мне все равно нужно отслеживать историю, чтобы я только подсчитывал каждый процесс/окно один раз. Дайте мне знать, если я неправильно понял ваш совет. Благодарю. – JayDee
Да - я имел в виду опрос. Я не думаю, что получить список процессов раз в секунду будет особенно ресурсоемким - но вы всегда можете попробовать и посмотреть? – Blorgbeard