【问题标题】:Killing Like Task Manager像任务管理器一样杀戮
【发布时间】:2017-01-02 13:50:00
【问题描述】:

在任务管理器 [Windows 8+] 中,“进程”选项卡中列出了当前正在运行的所有进程。如果我们打开 MS Word 的 2 个窗口,它只会出现一次,但这实际上是一个组,可以扩展为能够分别查看和结束这两个任务。

这很好,但是它不会延续到列出 WINWORD.EXE 的“详细信息”选项卡,但仅出现 1 次!因此只有 1 个 PID!共享 PID 是一个问题,因为尝试关闭它会导致整个事物都被关闭。

我只想杀死一个特定的单词窗口,而不是当我尝试以编程方式杀死窗口时发生的所有单词窗口(目前我在 python 中通过import os 使用taskkill,任何其他方式做没有额外的模块也可以)。

现在,当我运行 taskkill.... "WordDoc.docx" 时,它会杀死每个打开的 Word 文档,这非常烦人并且可能会丢失数据。有没有办法像在任务管理器中那样杀死“进程”?

谢谢

PS 我没有使用 /T 所以这不是问题

【问题讨论】:

    标签: python ms-word pid


    【解决方案1】:

    进程 选项卡上关闭进程的单个窗口时,任务管理器不会终止该窗口所属的进程,而只是向该窗口发送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)     
    

    【讨论】:

    • 无论如何要使用通常预加载的模块来代替? (我很感激你的回答,但如果我可以使用 python 安装的东西会更好,即使它像 os.ETC() 这样依赖于操作系统。谢谢你的时间
    • pst 你也应该导入 win32con,因为你的代码不起作用 ;),但我仍然想要一个原生解决方案,它只适用于其他人 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2017-02-28
    • 2019-02-23
    • 1970-01-01
    相关资源
    最近更新 更多