windows下根据PID显示窗体

发布于 2022-01-11  4.87k 次阅读


常常有同事因为开了许多同名的控制台,在某控制台占用资源较多的时候找不到该控制台而来问我有没有解决方法。找了下资料发现可以调用windows 的FindWindow 和 ShowWindow api 根据pid 找到窗口句柄,进而显示窗口。
以下为python3 代码,输入pid 号显示窗口,前提是该pid 号确实有窗口,且它不在最大化状态下(显示窗口调用的是showWindow 的最大化api, 所以使用前最好先 显示桌面 一下?):
#1. 需安装 pywin32 包


import psutil
import win32gui
import win32con
import win32process

find_pid = int(input('请输入pid: '))


def get_all_hwnd(hwnd, mouse):
    if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
        nID = win32process.GetWindowThreadProcessId(hwnd)
        # print(nID,win32gui.GetWindowText(hwnd))
        del nID[0]
        for abc in nID:
            try:
                pro = psutil.Process(abc).name()
            except psutil.NoSuchProcess:
                pass
            else:
                # print(abc,win32gui.GetWindowText(hwnd))          
                if abc == find_pid:
                    # print("进程ID:", abc, "窗口句柄: ", hwnd, "标题: ", win32gui.GetWindowText(hwnd))
                    win32gui.ShowWindow(hwnd, win32con.SW_MAXIMIZE)


win32gui.EnumWindows(get_all_hwnd, 0)

#2. 以下是打包好的二进制文件,可直接使用:
https://ad.ley.best/others/others/display_window_by_pid.exe