python win32 窗口截图

python win32 窗口截图

获取窗口句柄和标题

import win32gui

hwnd_title = dict()


def _get_all_hwnd(hwnd, mouse):
    if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
        hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)})


win32gui.EnumWindows(_get_all_hwnd, 0)
for wnd in hwnd_title.items():
    print(wnd)

运行结果如下,格式为:(窗口句柄, 窗口标题)
可自行根据标题筛选想要的窗口

(65772, '')
(262798, 'pythonProject – screenShot.py')
(5114244, '项目里程碑.ppt[兼容模式] - PowerPoint')
(3803304, '')
(133646, '')
(133642, '')

根据窗口句柄截图

import win32com.client
import win32gui
import win32api
import win32con
import win32ui
from PIL import Image


def setForeground(hwnd):
    """
        将窗口设置为最前面
    :param hwnd: 窗口句柄 一个整数
    """
    if hwnd != win32gui.GetForegroundWindow():
        shell = win32com.client.Dispatch("WScript.Shell")
        shell.SendKeys('%')
        win32gui.SetForegroundWindow(hwnd)


def winShot(hwnd):
    """
        根据窗口句柄截取窗口视图
    :param hwnd: 窗口句柄 一个整数
    """
    bmpFileName = 'screenshot.bmp'
    jpgFileName = 'screenshot.jpg'

    r = win32gui.GetWindowRect(hwnd)
    hwin = win32gui.GetDesktopWindow()
    # 图片最左边距离主屏左上角的水平距离
    left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
    # 图片最上边距离主屏左上角的垂直距离
    top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)
    hwindc = win32gui.GetWindowDC(hwin)
    srcdc = win32ui.CreateDCFromHandle(hwindc)
    memdc = srcdc.CreateCompatibleDC()
    bmp = win32ui.CreateBitmap()
    bmp.CreateCompatibleBitmap(srcdc, r[2] - r[0], r[3] - r[1])
    memdc.SelectObject(bmp)
    memdc.BitBlt((-r[0], top - r[1]), (r[2], r[3] - top), srcdc, (left, top), win32con.SRCCOPY)
    bmp.SaveBitmapFile(memdc, bmpFileName)

    im = Image.open(bmpFileName)
    im = im.convert('RGB')
    im.save(jpgFileName)

if __name__ == '__main__':
    setForeground(5114244)
    winShot(5114244)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bdawn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值