使用delphi XE我试图用不同的参数多次执行exe文件 但出于各种原因,我需要分别关闭/重新启动每个。
所以我想如果我启动那个example.exe并获得它的pid
我将在以后使用该唯一的pid值杀死它。
看看我是否只是执行example.exe那么尝试使用进程名称或进程文件路径获取该进程的PID,它最终会给我错误的结果,因为有4个进程具有该名称。
任何建议或想法? 我的问题可能看起来与其他一些类似,但我需要返回pid值,所以请记住
答案 0 :(得分:4)
使用Win32 API CreateProcess()
功能。它输出一个PROCESS_INFORMATION
结构,其中包含已启动进程及其主线程的ID和句柄。您可以使用进程句柄等待进程退出。
要终止流程,您可以将流程句柄传递给TerminateProcess()
。
或者,你可以更加文明,并且:
EnumWindows()
或EnumThreadWindows()
枚举流程的UI窗口,向每个窗口发送WM_CLOSE
消息。和/或:
WM_QUIT
消息发布到主线程。如果这不起作用,请使用TerminateProcess()
作为最后的手段。
答案 1 :(得分:2)
研究使用CreateProcess。 StackOverflow上有多个示例,包括:Hide process window with 'CreateProcess'
如果调用成功,您将在TProcessInformation参数中获得Process的句柄,并将其传递给CreateProcess。