python-3.x - 通过在 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 。如何解决这个问题?是否有其他可能的方法来捕获最小化远程桌面的屏幕。
提前致谢。
解决方案
根据 Ranorex 团队在这篇文章中的说法,当 RDP 最小化时,它会锁定屏幕并且无法完成捕获。提供的解决方案是在您的计算机和测试计算机/服务器之间使用 VM。您通过 RDP 连接到虚拟机,然后从虚拟机通过 RDP 连接到测试计算机/服务器。这样,虽然您永远不会最小化 VM 上的测试计算机/服务器窗口,但您可以最小化计算机上的 VM 窗口。
我进行了测试,它没有任何问题。我不会肯定这个解决方案适用于所有情况,但似乎是一个很好的起点。
请注意,中间 VM 不需要是杀手机器……它只需要足够强大以运行 RDP。
推荐阅读
- python - 如何将消息从客户端发送到服务器套接字
- entity-framework-6 - 将 EF6 添加到 Razor 类库项目以供许多 BLAZOR 项目共享?
- javascript - 警告:道具类型失败:提供给“ForwardRef(滑块)”的道具“值”无效
- django - Django models.py(API 结果) - 检索当前帖子以添加 api 结果
- c# - 如何在 C# windows 应用程序中添加打印机路径?
- r - 在 R 中循环一个函数
- reactjs - 在 React 中管理多个输入时
- java - 在我的 postgres 模式中的任何表中执行任何插入/更新/删除操作后,是否可以调用我的 java 函数
- c - c lang,switch case中的双打印语句
- r - 绘制多个时间序列对象的平均值并说明该图中的误差