本文實(shí)例為大家分享了python基于win32實(shí)現(xiàn)窗口截圖的具體代碼,供大家參考,具體內(nèi)容如下
獲取窗口句柄和標(biāo)題
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)
運(yùn)行結(jié)果如下,格式為:(窗口句柄, 窗口標(biāo)題)
可自行根據(jù)標(biāo)題篩選想要的窗口
(65772, '')
(262798, 'pythonProject – screenShot.py')
(5114244, '項(xiàng)目里程碑.ppt[兼容模式] - PowerPoint')
(3803304, '')
(133646, '')
(133642, '')
根據(jù)窗口句柄截圖
import win32com.client
import win32gui
import win32api
import win32con
import win32ui
from PIL import Image
def setForeground(hwnd):
"""
將窗口設(shè)置為最前面
:param hwnd: 窗口句柄 一個(gè)整數(shù)
"""
if hwnd != win32gui.GetForegroundWindow():
shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys('%')
win32gui.SetForegroundWindow(hwnd)
def winShot(hwnd):
"""
根據(jù)窗口句柄截取窗口視圖
:param hwnd: 窗口句柄 一個(gè)整數(shù)
"""
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)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- Python爬蟲(chóng)之Selenium實(shí)現(xiàn)窗口截圖
- python3應(yīng)用windows api對(duì)后臺(tái)程序窗口及桌面截圖并保存的方法