当前位置: 代码网 > it编程>前端脚本>Python > Python根据Windows窗口截图的几种实现方法

Python根据Windows窗口截图的几种实现方法

2025年10月09日 Python 我要评论
在windows系统下,python可通过以下方法实现窗口截图,具体方案取决于需求精度和场景:1. 使用pil库截取全屏或指定区域from pil import imagegrab# 截取整个屏幕sc

在windows系统下,python可通过以下方法实现窗口截图,具体方案取决于需求精度和场景:

1. 使用pil库截取全屏或指定区域

from pil import imagegrab

# 截取整个屏幕
screenshot = imagegrab.grab()
screenshot.save("full_screen.png")

# 截取指定区域(左上角坐标+宽高)
crop_area = (100, 100, 500, 400)  # left, top, right, bottom
cropped = imagegrab.grab(bbox=crop_area)
cropped.save("partial_screen.png")

2. 结合win32gui精准截取指定窗口

需先安装pywin32库:

pip install pywin32

代码示例:

import win32gui
from pil import imagegrab

# 获取窗口句柄
hwnd = win32gui.findwindow(none, "记事本")  # 窗口标题

# 获取窗口位置和尺寸
left, top, right, bot = win32gui.getwindowrect(hwnd)
width = right - left
height = bot - top

# 截取窗口区域
img = imagegrab.grab(bbox=(left, top, right, bot))
img.save("window_screenshot.png")

3. 使用mss库(跨平台高性能)

安装:

pip install mss

代码示例:

import mss

with mss.mss() as sct:
    # 截取指定显示器编号的屏幕
    monitor = sct.monitors[1]
    sct_img = sct.grab(monitor)
    mss.tools.to_png(sct_img.rgb, sct_img.size, output="mss_screenshot.png")

4. 截取隐藏窗口(需配合win32api)

对于非最小化窗口,可通过win32gui获取窗口dc后截图:

import win32gui
import win32ui
import win32con
from pil import image

hwnd = win32gui.findwindow(none, "计算器")

# 创建设备上下文
hdc = win32gui.getdc(hwnd)
mdc = win32gui.createcompatibledc(hdc)

# 获取窗口尺寸
left, top, right, bot = win32gui.getwindowrect(hwnd)
w, h = right - left, bot - top

# 创建位图
bitmap = win32ui.createbitmap()
bitmap.createcompatiblebitmap(hdc, w, h)
win32gui.selectobject(mdc, bitmap.gethandle())

# 复制屏幕区域
win32gui.bitblt(mdc, 0, 0, w, h, hdc, 0, 0, win32con.srccopy)

# 保存为图片
bmp_info = bitmap.getinfo()
bmp_str = bitmap.getbitmapbits(true)
pil_img = image.frombuffer(
    'rgb',
    (bmp_info['bmwidth'], bmp_info['bmheight']),
    bmp_str,
    'raw',
    'bgrx',
    0,
    1
)
pil_img.save("hidden_window.png")

# 释放资源
win32gui.deleteobject(bitmap.gethandle())
win32gui.deletedc(mdc)
win32gui.releasedc(hwnd, hdc)

关键注意事项:

  1. 窗口标题匹配findwindow需精确匹配窗口标题,可通过spy++工具获取实际标题
  2. 权限问题:部分窗口截图需要管理员权限
  3. 性能对比
    • pil:简单快速,适合简单场景
    • mss:跨平台,支持多显示器,性能优异
    • win32api:精准控制,可处理隐藏窗口
  4. dpi缩放:高dpi屏幕需额外处理缩放比例,可通过ctypes获取系统缩放系数调整坐标

根据具体需求选择方案,常规截图推荐使用pil或mss,精准控制推荐win32api方案。

到此这篇关于python根据windows窗口截图的几种实现方法的文章就介绍到这了,更多相关python根据windows窗口截图内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com