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 MySQL数据库基本操作及项目示例详解

    Python MySQL数据库基本操作及项目示例详解

    这篇文章主要介绍了Python连接MySQL数据库后的一些基本操作,并以银行管理系统项目为例,为大家具体介绍了一下部分功能的实现,文中的示例代码具有一定的学习价值,感兴趣的可以了解一下
    2021-12-12
  • 在Python中字典按值排序的实现方法

    在Python中字典按值排序的实现方法

    这篇文章主要介绍了在Python中字典按值排序的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • python分割列表(list)的方法示例

    python分割列表(list)的方法示例

    这篇文章主要给大家介绍了python分割列表(list)的方法,文中给出了详细的示例代码大家参考学习,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • Python调用本地ollama大模型实现智能语音助手

    Python调用本地ollama大模型实现智能语音助手

    这篇文章主要为大家详细介绍了Python如何调用本地ollama大模型实现智能语音助手,集成了语音录制,语音识别等功能,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-05-05
  • Python使用openpyxl模块处理Excel文件

    Python使用openpyxl模块处理Excel文件

    这篇文章介绍了Python使用openpyxl模块处理Excel文件的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 基于Pytorch实现的声音分类实例代码

    基于Pytorch实现的声音分类实例代码

    声音分类是音频深度学习中应用最广泛的方法之一,下面这篇文章主要给大家介绍了如何基于Pytorch实现声音分类的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • python中使用enumerate函数遍历元素实例

    python中使用enumerate函数遍历元素实例

    这篇文章主要介绍了python中使用enumerate函数遍历元素实例,这是一个比较简单的例子,需要的朋友可以参考下
    2014-06-06
  • Python中的套接字编程是什么?

    Python中的套接字编程是什么?

    不可否认,互联网已成为“存在之魂”,其活动以“连接”或“网络”为特征.使用套接字的最关键的基础之一,使这些网络成为可能.本文涵盖了有关使用Python进行套接字编程的所有领域.套接字可以帮助您建立这些连接,而Python无疑可以简化连接,需要的朋友可以参考下
    2021-06-06
  • Python序列化pickle模块使用详解

    Python序列化pickle模块使用详解

    这篇文章主要介绍了Python序列化pickle模块使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Python3 翻转二叉树的实现

    Python3 翻转二叉树的实现

    这篇文章主要介绍了Python3 翻转二叉树的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09

最新评论