Запуск программы и открытия файла являются событиями ОС (они включают проверки безопасности) и могут быть получены с помощью встроенных функций аудита Windows.Это не по теме, пересылайте дополнительные вопросы на ServerFault.com
Минимизация программы - это пример сообщения приложения, для получения которого вам необходимо установить ловушку, используя SetWindowsHookEx
.Начиная с .NET 4 (которая включает поддержку параллельной работы), это можно сделать с помощью C #, но это не рекомендуется.Одна огромная проблема, о которой вам нужно знать, это то, что ваш код захвата событий НИКОГДА не должен генерировать собственные события, иначе вы запустите цепную реакцию, которая приведет к сбою всех запущенных программ.