【发布时间】:2024-01-23 16:00:02
【问题描述】:
我想终止多个进程,但我想让每个进程都有机会保存其数据,询问用户是否保存文件,甚至忽略关闭请求。
所以TerminateProcess 是不可能的,因为它会立即终止进程。另一种方法是使用SendMessage/PostMessage 将WM_CLOSE 发送到主窗口,不幸的是我对进程的窗口一无所知,我只有进程ID,所以FindWindow 没有也无济于事。还有其他方法可以找到进程的主窗口吗?
换句话说: 有什么方法可以优雅地终止任何进程,就像您单击“结束任务”时 Windows 7 任务管理器所做的那样? (而不是“结束进程”)
【问题讨论】:
-
我假设“任务”是*(可见)窗口。因此,
WM_CLOSE将(可能)在终止任务时发送。 -
如果您不是软件开发人员 - 只是 Windows 用户 - 请参阅 the related Super User question on how to gracefully ask a running application to terminate。
-
请注意,从 Windows 8.1 开始,任务管理器的“结束任务”按钮现在会强制终止所选应用程序并导致您丢失所有未保存的工作。您可能需要编辑您的问题以反映这一点。