2017-01-02 127 views
2

在任務管理器[Windows 8+]內部,在「進程」選項卡中列出當前正在運行的所有進程。如果我們打開2個MS Word窗口,它只會出現一次,但這實際上是一個組,可以擴展爲能夠分別查看和結束兩個任務。像任務管理器一樣殺死

這很好,但是它不會繼續到列出WINWORD.EXE的「詳細信息」選項卡,但只有一次發生!因此只有1個PID!共享一個PID是一個問題,因爲試圖關閉它會導致整個事件關閉。

我想只殺死一個特定的詞窗口,而不是所有當我嘗試以編程方式殺死windows時發生的詞窗口(目前我在Python中使用taskkill通過import os,任何其他方式來做到這一點,沒有額外的模塊也可以)。

現在,當我運行taskkill.... "WordDoc.docx"它會殺死每個打開的文檔,這是非常煩人的,可能會丟失數據。有沒有辦法可以殺死「proccesses」,就像在任務管理器中完成的一樣?

謝謝

我不使用/ T,這樣是不是問題PS

回答

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)  
+0

仍要使用通常預先加載的模塊而不是tho? (我很欣賞你的答案,但是如果我可以使用與python一起安裝的東西,即使它是os.ETC()這樣的操作系統將會更好。謝謝你的時間 –

+0

pst你還應該導入win32con,導致你的代碼不工作;),但我仍然喜歡本地解決方案,它只是爲其他人:) –

相關問題