实现思路是先获取到当前最上面活动的窗口信息,然后提取该窗口的名称信息。
之后获取窗口的坐标信息,即左上角的开始坐标及右下角的结束坐标。最后直接截图并将截图的图片进行展示。
其中用到了两个第三方模块,分别是win32gui和Pillow,安装命令如下:
pip install Pillow
pip install win32gui
将其中使用到的三个非标准库导入进来。
from win32gui import * # 操作windows窗口
from PIL import ImageGrab # 操作图像
import win32con # 系统操作
初始化一个set列表存放所有活动窗口名称,使用set类型的目的是保证所有活动窗口名称的唯一性。
names = set()
编写get_window_title函数,获取当前的所有活动窗口对象。
def get_window_title(window, nouse):
'''
获取窗口标题函数
:param window: 窗口对象
:param nouse:
:return:
'''
if IsWindow(window) and IsWindowEnabled(window) and IsWindowVisible(window):
names.add(GetWindowText(window))
EnumWindows(get_window_title, 0)
list_ = [name for name in names if name]
for n in list_:
print('活动窗口: ', n)
输入自己想要截图的窗口名称作为当前窗口,然后提取到需要截图的窗口对象。
name = input('请输入需要截图的活动窗口名称: \n')
window = FindWindow(0, name) # 根据窗口名称获取窗口对象
ShowWindow(window, win32con.SW_MAXIMIZE) # 将该窗口最大化
获取该窗口的坐标信息,开始坐标信息和结束坐标信息。
x_start, y_start, x_end, y_end = GetWindowRect(window)
# 坐标信息
box = (x_start, y_start, x_end, y_end)
调用ImageGrab.grab()函数实现对窗口的截图操作。
image = ImageGrab.grab(box)
在完成截图之后展示一下截图的效果,如果不需要展示的话就不需要添加这行代码了。
image.show() # 图片展示,如果截完图需要展示则放开此项
最后一步,将截图好的图片保存下来。
image.save('target.png')
print('截图已经保存完成!')
上面整个的python截图操作就实现了,目前正在考虑怎么实现批量截图的过程,有好的建议可以直接留言或是私信,感谢大家一直以来的支持!