有人能告诉我如何在C#中获取Windows控制台应用程序的句柄吗?在Windows窗体应用程序中,我通常会尝试this.Handle.
在Windows上,subprocess.Popen.terminate调用win32 TerminalProcess.但是,我看到的行为是我尝试终止的进程的子进程仍在运行.这是为什么?如何确保进程启动的所有子进程都被终止?
我想终止一些进程,但我希望每个进程都有机会保存其数据,询问用户是否保存文件,甚至忽略关闭请求.
所以TerminateProcess不可能,因为它立即杀死了这个过程.另一种方法是使用SendMessage/ PostMessage发送WM_CLOSE到主窗口,不幸的是我不知道进程的窗户什么,我只有进程ID,所以FindWindow没有帮助的.有没有其他方法可以找到进程的主窗口?
换句话说: 有没有办法像任务管理器点击" 结束任务 " 时那样优雅地终止任何进程?(而不是"结束过程")
我使用的是 Windows 10 和 Python 3.7。
我运行了以下命令。
import subprocess
exeFilePath = "C:/Users/test/test.exe"
subprocess.run(exeFilePath)
Run Code Online (Sandbox Code Playgroud)
使用此命令启动的 .exe 文件,我想在单击按钮或执行函数时强制退出。
查看过去的问题,有人指出强制退出的方法是获取PID并执行OS.kill,如下所示。
import signal
os.kill(self.p.pid, signal.CTRL_C_EVENT)
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何获取在 subprocess.run 中启动的进程的 PID。
我应该怎么办?
process ×2
python ×2
subprocess ×2
windows ×2
c# ×1
console ×1
hwnd ×1
kill-process ×1
winapi ×1