首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyautogui和win32gui截图背景窗口

pyautogui和win32gui截图背景窗口
EN

Stack Overflow用户
提问于 2021-06-13 15:39:09
回答 1查看 123关注 0票数 0

我正在尝试用pyautogui拍摄特定背景窗口的截图,而不是把它放在前台,我该怎么做呢?这是我开始的项目,但我不知道下一步是什么

在本例中,chrome.exe在后台运行,我尝试在不将窗口置于前台的情况下进行截图。

谢谢

代码语言:javascript
复制
#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
EN

回答 1

Stack Overflow用户

发布于 2021-06-16 05:10:22

pyautogui只能捕获屏幕。我们可以使用win32ui.createBitmap()截图背景窗口。通过一些修改来复制original answer,以避免其注释中所述的黑图问题:

代码语言:javascript
复制
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, width, 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', 0, 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')    
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67955931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档