比TerminateProcess更友善的方式?

use*_*160 7 delphi terminate

我有一个备份应用程序,它将在备份之前关闭用户定义的运行程序,以便在备份之前关闭和刷新打开的数据文件.备份完成后,重新启动列表中的程序.

使用Caption和PostMessage获取窗口句柄没有问题(AppHandle,WM_CLOSE,0,0); 这适用于大多数应用程序,但不适用于在通知区域(系统托盘)中运行的应用程序

目前我正在使用TerminateProcess(它适用于那些通知区域应用程序,但它会打开文件,因为Windows会绕过任何关闭指令,只是将这些应用程序瘫痪.

我搜索了很长时间,我找不到更好的方法来关闭Notification Area应用程序.有人可以帮忙吗?

谢谢

Rob*_*edy 8

为了优雅地关闭程序,您需要了解该程序预期如何关闭.如果关闭主窗口完成它,那么您需要知道如何识别"主"窗口.

程序不会在通知区域中"运行".他们在那里展示图标.任何带有通知图标的程序也必须有一个窗口(因为shell告诉程序通过向窗口发送消息来点击图标).即使窗口不可见,它仍然必须存在.如果您可以确定一组标识与特定通知图标关联的窗口的属性,则可以将其关闭.但是,没有标准的属性集可供查找; 每个程序都可以做不同的事情.

即使您找到了您正在寻找的窗口,关闭它也可能不是程序预期终止的方式.它可能需要来自通知图标菜单的某个命令,或者程序显示的对话框发送的某些消息.