如何解决pyautogui 和 win32gui 屏幕截图背景窗口
我正在尝试使用特定背景窗口的 pyautogui 进行屏幕截图,而不将其放在前台,我该怎么做? 这是我开始的项目,但我不知道下一步是什么
在这个例子中,chrome.exe 在后台运行,我试图在不将窗口置于前台的情况下进行屏幕截图
谢谢
#pip install pywin32
import pyautogui
import win32gui,win32api,win32con
import time
def takescreen():
myScreenshot = pyautogui.screenshot()
myScreenshot.save(r'screenshoot.png')
hwnd = win32gui.FindWindow(None,'Chrome')
hwndChild = win32gui.GetWindow(hwnd,win32con.GW_CHILD)
hwndChild2 = win32gui.GetWindow(hwndChild,win32con.GW_CHILD)
##NEXT STEP
解决方法
pyautogui 只能截屏。我们可以使用 win32ui.createBitmap()
截取背景窗口。复制 original answer 并进行一些修改以避免其评论中描述的黑色图像问题:
def takescreen(hwnd,width,height,filename):
#hwnd is window handle
#width,height are in pixels
#filename is name of screenshot file
hwndDC = win32gui.GetWindowDC(hwnd)
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
saveDC = mfcDC.CreateCompatibleDC()
saveBitMap = win32ui.CreateBitmap()
saveBitMap.CreateCompatibleBitmap(mfcDC,height)
saveDC.SelectObject(saveBitMap)
result = windll.user32.PrintWindow(hwnd,saveDC.GetSafeHdc(),2)
bmpinfo = saveBitMap.GetInfo()
bmpstr = saveBitMap.GetBitmapBits(True)
im = Image.frombuffer(
'RGB',(bmpinfo['bmWidth'],bmpinfo['bmHeight']),bmpstr,'raw','BGRX',1)
win32gui.DeleteObject(saveBitMap.GetHandle())
saveDC.DeleteDC()
mfcDC.DeleteDC()
win32gui.ReleaseDC(hwnd,hwndDC)
if result == 1:
#PrintWindow Succeeded
im.save(filename)
#sample usage
hwnd = win32gui.FindWindow(None,'Chrome')
takescreen(hwnd,1024,768,'screenshot.png')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。