【发布时间】:2009-02-03 06:35:44
【问题描述】:
我正在寻找一种方法来关闭另一个 Windows 应用程序。有没有办法做到这一点?
理想情况下,我想要基本上模仿 ALT-F4 的东西,或者按右上角的“X”或类似的东西。
或者,是否有一个应用程序已经这样做了? tskill 对于我的想法来说有点太苛刻了。
【问题讨论】:
我正在寻找一种方法来关闭另一个 Windows 应用程序。有没有办法做到这一点?
理想情况下,我想要基本上模仿 ALT-F4 的东西,或者按右上角的“X”或类似的东西。
或者,是否有一个应用程序已经这样做了? tskill 对于我的想法来说有点太苛刻了。
【问题讨论】:
编辑:我稍微挖掘了一下,发现了一个MSDN Article,使用的是微软推荐的方法。
由于这是一个 Windows 应用程序,您可以将WM_CLOSE 消息发送到主窗口,但请记住,如果应用程序覆盖了对 WM_CLOSE 消息的处理,您可能会得到意想不到的结果。另外请记住,使用 TerminateProcess 和 ExitProcess 等 win32 函数也会产生令人不快的副作用(请参阅 msdn 上的备注部分),包括 dll 中的全局数据被泄露以及死锁。
如果您负责编写目标应用程序,我建议您添加某种形式的内置终止机制,该机制可以在外部触发(例如,环回地址或管道上的魔术包),这样您就可以确保您的应用程序已清理适当地追随自己。
【讨论】:
根据您的描述,这听起来像是一个窗口应用程序。在这种情况下,您可以向其发送WM_CLOSE 消息以模仿按下“X”按钮时的行为。
另一种选择是使用TerminateProcess,但这可能也是 tskill 的作用。
【讨论】:
更强大的关闭应用命令是:
PostMessage (myhnd,WM_ENDSESSION,TRUE,ENDSESSION_LOGOFF);
【讨论】:
我先推荐你my answer to another question;尽管它是关于 Delphi 和服务的,但答案既不是 Delphi 特定的,也不是特定于服务的。简而言之,没有通用的方法可以优雅地停止程序。该问题的公认答案展示了将wm_Close 消息发布到程序窗口。
【讨论】: