2

我有一组可以远程访问的虚拟机(运行 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本身上运行。但是当没有人远程进入机器时它正在运行。

4

1 回答 1

0

明显的解决方法是使用 2 台虚拟机:主主机为目标主机运行远程会话。它还允许像mouse_event或这样的输入操作keybd_event。唯一的一个要求是不要最小化 RDP 窗口(或 VNC 软件,没关系),尽管它可能会失焦。

它是构建/测试机器池的广泛使用的方法。我在大型测试团队工作了几年,从未听说过其他方法。

PS Pillowpyscreenshot怎么样?

于 2015-02-26T15:55:24.493 回答