0

当试图截取 vmware 机器的屏幕截图时,它的内部由于某种原因被涂黑了。

黑屏证明

我希望看到以下内容:

可见的屏幕证明

在计算器和少数其他应用程序上测试时,代码似乎运行良好,可能导致此问题的原因是什么?

import win32gui
import win32ui
import win32con

def backgroundScreenshot(hwnd, width, height):
    wDC = win32gui.GetWindowDC(hwnd)
    dcObj=win32ui.CreateDCFromHandle(wDC)
    cDC=dcObj.CreateCompatibleDC()
    dataBitMap = win32ui.CreateBitmap()
    dataBitMap.CreateCompatibleBitmap(dcObj, width, height)
    cDC.SelectObject(dataBitMap)
    cDC.BitBlt((0,0),(width, height) , dcObj, (0,0), win32con.SRCCOPY)
    dataBitMap.SaveBitmapFile(cDC, 'test.bmp')
    dcObj.DeleteDC()
    cDC.DeleteDC()
    win32gui.ReleaseDC(hwnd, wDC)
    win32gui.DeleteObject(dataBitMap.GetHandle())

title="Win10_64 - VMware Workstation 16 Player (Non-commercial use only)"
hwnd = win32gui.FindWindow(None, title)
print(hwnd)
backgroundScreenshot(hwnd, 900, 780)
4

1 回答 1

0
import pyautogui
import win32gui
import numpy as np

def screenshot(window_title=None):
    if window_title:
        hwnd = win32gui.FindWindow(None, window_title)
        if hwnd:
            win32gui.SetForegroundWindow(hwnd)
            x, y, x1, y1 = win32gui.GetClientRect(hwnd)
            x, y = win32gui.ClientToScreen(hwnd, (x, y))
            x1, y1 = win32gui.ClientToScreen(hwnd, (x1 - x, y1 - y))
            im = pyautogui.screenshot(region=(x, y, x1, y1))
            
            img = np.array(im)
            return img
        else:
            print('Error: Virtual Machine is not running!')
    else:
        im = pyautogui.screenshot()
        return im


im = screenshot('Win10_64 - VMware Workstation 16 Player (Non-commercial use only)')
if im:
    im.save('test.png')

这是截取屏幕截图的另一种方式,它确实有效,但是它无法实现在后台截取窗口的所需功能,因为其他选项卡也被截取。

问题已解决,原因:未知(如果有人对原因有一些建议,我将不胜感激)

虚拟机屏幕

主屏幕

期望的输出

于 2020-11-20T20:26:40.723 回答