欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python基于win32实现窗口截图

程序员文章站 2022-06-24 22:34:28
本文实例为大家分享了python基于win32实现窗口截图的具体代码,供大家参考,具体内容如下获取窗口句柄和标题import win32guihwnd_title = dict()def _get_a...

本文实例为大家分享了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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。