首页 > 解决方案 > 通过在 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: screen grab failed 。如何解决这个问题?是否有其他可能的方法来捕获最小化远程桌面的屏幕。

提前致谢。

标签: python-3.xscreenshotremote-serverpyautoguirdp

解决方案


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

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

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


推荐阅读