Функция скриншота не работает на других машинах - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь сделать скриншот окна, пока окна находятся в фоновом режиме. Код отлично работает на моей системе (HP, win7). Тот же код не дает правильного вывода в другой системе (win7, Lenovo и Dell). Это действительно дает скриншот, но это не ясно. Черный цвет везде, где есть пустое место в окне. Нажмите здесь, чтобы увидеть изображение

def capture_screen(win_name,outloc,imagename,h):
        hwnd = win32gui.FindWindow(None,win_name)
        # Get window bounds
        left, top, right, bot = win32gui.GetWindowRect(hwnd)
        w = right - left
        #h = bot - top
        hwndDC = win32gui.GetWindowDC(hwnd)
        mfcDC = win32ui.CreateDCFromHandle(hwndDC)
        saveDC = mfcDC.CreateCompatibleDC()

        saveBitMap = win32ui.CreateBitmap()
        saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)

        saveDC.SelectObject(saveBitMap)

        result = windll.user32.PrintWindow(hwnd, saveDC.GetSafeHdc(), 1)
        #print(result)

        bmp_info = saveBitMap.GetInfo()
        bmp_str = saveBitMap.GetBitmapBits(True)
        #print(bmp_str)

        im = Image.frombuffer('RGB',(bmp_info['bmWidth'], bmp_info['bmHeight']),
            bmp_str, 'raw', 'BGRX', 0, 1)

        win32gui.DeleteObject(saveBitMap.GetHandle())
        saveDC.DeleteDC()
        mfcDC.DeleteDC()
        win32gui.ReleaseDC(hwnd, hwndDC)

        if result == 1:
            im.save(outloc+imagename)

1 Ответ

0 голосов
/ 08 июня 2019

Чтобы захватить любое скрытое окно (Win32, UWP, ...), вы можете использовать DWM ( DwmRegisterThumbnail )

...