Действительно, оконных крючков было бы недостаточно. Фактически для выполнения задачи, о которой вы спрашиваете, вы можете использовать различные стратегии, такие как:
- перечисление процессов для поиска того, что вы ищете (Tool Help API или PSAPI)
- перечисление окон верхнего уровня на рабочем столе (но тогда вы ограничены рабочим столом)
- проверить глобальное или локальное событие, мьютекс (или другой объект ядра), чтобы сделать вывод, что какой-то экземпляр приложения работает
- ... или даже из ядра
PsSetCreateProcessNotifyRoutine
Возможно, есть варианты выше и еще немного.
По сути, вопрос в том, хотите ли вы проверить процесс или какой-то другой индикатор, который показывает, запущена ли программа, которую вы хотите проверить.