通过外部程序的进程名(例如notepad.exe)正确关闭外部程序



我正在开发一个演示软件。

我的应用程序循环播放列表中的项目,获取要显示的项目(=filename(的关联程序,然后使用"ShellExecute"函数启动关联程序。到目前为止还不错。。。

但在特定时间之后,执行的相关程序需要正确关闭(不终止/终止(。我可以获得进程名(即notepad.exe(和PID。

但我看不出有什么方法可以使用Processname关闭程序。我已经找到了一种使用"TerminateProcess"来杀死程序/进程的方法,但这不是我想要的方法。

因此,我的问题是,是否有一种方法可以通过使用ProcessName或ProcessID来正确地停止/关闭外部程序。

提前感谢!!

你应该使用关闭消息并将它们发送到程序中,我成功地完成了这段代码,试试看:

procedure TmyFRM.btn_closeClick(Sender: TObject);
var
h: HWND;
begin
h := FindWindow('Notepad', nil);
if h <> 0 then
PostMessage(h, WM_QUIT, 0, 0);
end;

考虑一下,有时您可以使用WM_Close而不是WM_Quit,也可以围绕SendMessage而不是PostMessage工作。当你试图在不杀死程序进程的情况下正确关闭程序时,所以你遵循程序例程,程序可能会对关闭消息做出不同的响应;例如,一些程序在关闭后会被最小化到托盘等。

最新更新