Получать событие ProcessExit/Stop из диспетчера задач для скрытой WindowsForm
Я попытался решить эту проблему, но единственное решение состояло в том, чтобы сделать окно, которое будет видимым для пользователя (даже если его значение 0x0, все еще делает его видимым в переключателе Alt-Tab).
Когда я имею в виду скрытый, я хочу скрыть его от Alt-Tab, Win-Tab, Ctrl-Tab, панели задач и раздела "Приложения" диспетчера задач.
Любое решение? Мне нужно только обнаружить неожиданную остановку из диспетчера задач, но мне нужно окно для получения событий от SetWinEventHook()
,
1 ответ
Вид подвоха-22. Вам нужно окно для получения WinEvents. Вы можете создать окно только для сообщений, которое скрыто от системы.
Но скрыть окно от системы также означает скрыть его от диспетчера задач. Если диспетчер задач не видит видимое окно (не показывает его в "приложениях"), он не будет пытаться изящно закрыть окно, он просто прервет процесс неудачно, и сигнал не будет отправлен процессу, когда что происходит.
Чтобы изящно закрыть окно, вы не можете скрыть окно от системы, но тогда вы должны принять другие побочные эффекты, которые сопровождают это.
Единственный вариант, который я могу придумать в этой ситуации, - это создать отдельный процесс, который контролирует ваш основной процесс. Если основной процесс неожиданно исчезает, процесс-наблюдатель может реагировать соответствующим образом. Вы можете сделать наблюдатель сервисом, чтобы пользователи без прав администратора не могли убить его в диспетчере задач.