我有一组可以远程访问的虚拟机(运行 Windows)。因此,这些机器都没有连接监视器,它们只能由远程桌面访问。
我想获取在桌面上运行的应用程序的屏幕截图。我发现如果我没有通过远程桌面连接,那么屏幕不会呈现并且我无法捕获屏幕(我管理的最好的方法是获得黑色图像)。
有什么方法可以强制桌面为了我的屏幕抓取而呈现?
编辑:好的,更具体地说,这里是一些 Python 代码,如果我被远程连接到机器中,它会截取屏幕截图:
import win32ui
import win32gui
hwnd = win32gui.FindWindow(None, window_name)
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, image_name)
# Free Resources
dcObj.DeleteDC()
cDC.DeleteDC()
win32gui.ReleaseDC(hwnd, wDC)
win32gui.DeleteObject(dataBitMap.GetHandle())
如果我在远程时运行它,它工作正常。一旦我没有被远程控制,我就会收到以下错误:
win32ui.error:BitBlt 失败
此错误是由于没有人远程进入时屏幕未呈现的结果。
我需要一个解决方案,当我没有通过远程桌面连接时,我可以在这种情况下获取屏幕截图。
编辑2:要清楚,代码在VM本身上运行。但是当没有人远程进入机器时它正在运行。