我有一个备份应用程序,它将在备份之前关闭用户定义的运行程序,以便可以在备份之前关闭和刷新打开的数据文件。备份完成后,它会重新启动列表中的程序。
我使用 Caption 和 PostMessage(AppHandle,WM_CLOSE,0,0) 获取窗口句柄没有问题;这适用于大多数应用程序,但不适用于在通知区域(系统托盘)中运行的应用程序
目前我正在使用 TerminateProcess( 并且它适用于那些通知区域应用程序,但它会在 Windows 绕过任何关闭指令时保持文件打开状态并且只是猛烈抨击这些应用程序。
我已经搜索了很长时间,但找不到更好的方法来关闭通知区域应用程序。有人可以帮忙吗?
谢谢
最佳答案
为了优雅地关闭程序,您需要了解该程序期望如何关闭。如果关闭主窗口完成它,那么您需要知道如何识别“主”窗口。
程序不会“在”通知区域中运行。他们在那里显示图标。任何带有通知图标的程序也必须有一个窗口(因为 shell 程序通过向窗口发送消息来告诉程序该图标已被单击)。即使窗口不可见,它仍然必须存在。如果您可以确定某些标识与特定通知图标关联的窗口的属性,那么您可以关闭它。但是,没有要查找的标准属性集;每个程序都可以做到不同。
即使您找到了您正在寻找的窗口,关闭它也可能不是程序期望的终止方式。它可能希望收到来自通知图标菜单的特定命令,或者由程序显示的对话框发送的某些消息。
关于delphi - 比 TerminateProcess 更友好的方式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6392344/