从隐藏的 Windows 窗体的任务管理器接收 ProcessExit/Stop 事件

Receive ProcessExit/Stop event from Task Manager for a hidden WindowsForm

我已经尝试解决这个问题,但唯一的解决方案是制作一个用户可见的 window(即使将其设为 0x0 仍然会在 Alt-Tab 切换器中显示)。

当我说隐藏时,我希望它从 Alt-Tab、Win-Tab、Ctrl-Tab、任务栏和任务管理器的 "Apps" 部分隐藏。

有什么解决方法吗?我只需要检测任务管理器的意外停止,但我需要 window 来接收来自 SetWinEventHook() 的事件。

有点像第 22 条军规。您需要 window 才能接收 WinEvents。您可以为此创建一个 message-only window,它对系统是隐藏的。

但是,从系统中隐藏 window 也意味着从任务管理器中隐藏它。如果任务管理器没有看到可见的 window(在 "Apps" 中没有显示),它不会尝试正常关闭 window,它只会中止进程,发生这种情况时没有信号发送到进程。

要优雅地关闭,您无法从系统中隐藏 window,但您必须接受随之而来的其他副作用。

在这种情况下我能想到的唯一选择是创建一个单独的进程来监视您的主进程。如果主进程意外消失,watcher进程可以做出相应的反应。您可以让观察者成为一项服务,这样非管理员用户就无法在任务管理器中将其终止。