像任务管理器一样杀死
问题描述:
在任务管理器[Windows 8+]内部,在“进程”选项卡中列出当前正在运行的所有进程。如果我们打开2个MS Word窗口,它只会出现一次,但这实际上是一个组,可以扩展为能够分别查看和结束两个任务。像任务管理器一样杀死
这很好,但是它不会继续到列出WINWORD.EXE的“详细信息”选项卡,但只有一次发生!因此只有1个PID!共享一个PID是一个问题,因为试图关闭它会导致整个事件关闭。
我想只杀死一个特定的词窗口,而不是所有当我尝试以编程方式杀死windows时发生的词窗口(目前我在Python中使用taskkill
通过import os
,任何其他方式来做到这一点,没有额外的模块也可以)。
现在,当我运行taskkill.... "WordDoc.docx"
它会杀死每个打开的文档,这是非常烦人的,可能会丢失数据。有没有办法可以杀死“proccesses”,就像在任务管理器中完成的一样?
谢谢
我不使用/ T,这样是不是问题PS
答
当过程选项卡上的关闭进程的一个窗口,任务管理器不杀的过程中窗口属于,但只是发送一个WM_CLOSE
消息到该窗口。您会注意到Word窗口没有被“杀死”,因为您仍然会提示您在Word文档中保存和未保存的更改。
您可以使用下面的代码,它枚举所有顶级窗口做同样的任务管理器,然后发送WM_CLOSE当窗口标题匹配的所需值:
import win32gui
def enumHandler(hwnd, lParam):
if win32gui.IsWindowVisible(hwnd):
if 'My Word Document' in win32gui.GetWindowText(hwnd):
win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0)
win32gui.EnumWindows(enumHandler, None)
仍要使用通常预先加载的模块而不是tho? (我很欣赏你的答案,但是如果我可以使用与python一起安装的东西,即使它是os.ETC()这样的操作系统将会更好。谢谢你的时间 –
pst你还应该导入win32con,导致你的代码不工作;),但我仍然喜欢本地解决方案,它只是为其他人:) –