屏幕捕获失败,因为它最小化了python中的远程桌面连接

问题描述

我使用python编写了一个脚本,我想在服务器上运行它。我使用Windows远程连接来连接到此服务器,但是我遇到了问题。

我想运行Image Grab以便在一天中的特定时间拍摄屏幕截图。我正在使用pyautogui软件包进行截图。但是,当程序运行时,会发生错误并停止执行。

我有以下代码,用于在远程桌面(RDP)会话中捕获屏幕截图。

import pyautogui
import time

def imagegrab(): 

    timedata = time.localtime()
    current_time = time.strftime("%H:%M",timedata)
    if (current_time == "10:00"  and current_time == "12:00"):
        
        image=pyautogui.screenshot()
        image.save("Box.png")
 
    t = threading.Timer(30.0,imagegrab)
    t.start()
    print("thread calling.")
print(imagegrab())

但如果此时最小化远程屏幕,则会抛出 OSError:屏幕抓取失败。 如何解决这个问题?还有其他可能的方法来捕获最小化远程桌面的屏幕。

谢谢。

解决方法

根据 this post 中的 Ranorex 团队的说法,当 RDP 最小化时,它会被屏幕锁定并且无法进行捕获。提供的解决方案是在您的计算机和测试计算机/服务器之间使用 VM。您通过 RDP 连接到 VM,然后从 VM 通过 RDP 连接到测试计算机/服务器。这样,虽然您从不最小化 VM 上的测试计算机/服务器窗口,但您可以最小化计算机上的 VM 窗口。

我进行了测试,它没有任何问题。我不会肯定这个解决方案适用于所有情况,但它似乎是一个很好的起点。

请注意,中间 VM 不需要成为杀手级机器……它只需要足够强大以运行 RDP。