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

 更新时间:2025年10月09日 09:11:10   作者:detayun  
文章介绍了Windows下Python截图的四种方法:PIL库(简单快速)、win32gui(精准控制窗口)、mss库(跨平台高性能)及win32API处理隐藏窗口,需注意窗口标题匹配、权限问题和DPI缩放调整,推荐常规截图用PIL或mss,需精准控制时使用win32API,需要的朋友可以参考下

在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窗口截图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python通过poll实现异步IO的方法

    Python通过poll实现异步IO的方法

    这篇文章主要介绍了Python通过poll实现异步IO的方法,实例分析了poll方法实现异步IO的相关技巧,需要的朋友可以参考下
    2015-06-06
  • pygame学习笔记(2):画点的三种方法和动画实例

    pygame学习笔记(2):画点的三种方法和动画实例

    这篇文章主要介绍了pygame学习笔记(2):画点的三种方法和动画实例,本文讲解了单个像素(画点)、连接多个点形成线、引用图像、动画完整实例,需要的朋友可以参考下
    2015-04-04
  • Python+Pygame实战之疯狂吃水果游戏的实现

    Python+Pygame实战之疯狂吃水果游戏的实现

    吃豆人和切水果这两个游戏相信大家都不陌生吧,本文将利用Python中的Pygame模块编写出一款结合吃豆人+切水果的新游戏:疯狂吃水果,感兴趣的可以了解一下
    2022-06-06
  • Python实现CAN报文转换工具教程

    Python实现CAN报文转换工具教程

    这篇文章主要介绍了Python实现CAN报文转换工具教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 三种Matplotlib中动态更新绘图的方法总结

    三种Matplotlib中动态更新绘图的方法总结

    这篇文章主要为大家详细介绍了如何随着数据的变化动态更新Matplotlib(Python的数据可视化库)图,文中介绍了常用的三种方法,希望对大家有所帮助
    2024-04-04
  • Python内置函数int()用法简单介绍

    Python内置函数int()用法简单介绍

    这篇文章主要给大家介绍了关于Python内置函数int()用法的相关资料,int()函数常用来把其他类型转换为整数,文中通过代码介绍的非常详细,对大家学习或者使用python具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-05-05
  • Python获取svn版本信息

    Python获取svn版本信息

    本文主要介绍了Python获取svn版本信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Python中使用bidict模块双向字典结构的奇技淫巧

    Python中使用bidict模块双向字典结构的奇技淫巧

    bidict模块通过一对一映射结构的处理为Pyhton带来双向字典,能够更加利用Python的切片功能,这里我们就来学习Python中使用bidict模块双向字典结构的奇技淫巧:
    2016-07-07
  • Python Grid使用和布局详解

    Python Grid使用和布局详解

    这篇文章主要为大家详细介绍了Python Grid使用和布局,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • PyTorch环境配置及安装过程

    PyTorch环境配置及安装过程

    这篇文章主要介绍了PyTorch环境配置及安装,本文通过图文实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04

最新评论