gpt4 book ai didi

python - 如果笔记本电脑屏幕关闭,通过 printwindow 获取屏幕截图不会重绘

转载 作者:太空狗 更新时间:2023-10-29 23:56:57 28 4
gpt4 key购买 nike

我的目标是在笔记本电脑屏幕关闭时截取应用程序的屏幕截图,但屏幕截图将始终与关闭屏幕之前的屏幕截图相同。一旦屏幕关闭,它不会重新绘制自身,并保持卡住状态。

我正在使用 Python 中的 printwindow 获取屏幕截图(使用此处描述的方法:Python Screenshot of inactive window PrintWindow + win32gui

只要我的膝上型电脑屏幕打开,此方法就可以很好地工作,但如果我将其关闭,它只会返回屏幕关闭前的最后一张图像。我试过使用 win32gui.RedrawWindow,希望这会强制重绘,但我还没有让它工作,甚至尝试了所有不同的标志。我也试过通过pyautogui获取屏幕截图,但这也有同样的问题。有没有办法在笔记本电脑屏幕关闭时重绘应用程序?

最佳答案

如果有一种直接的方法来做您想做的事情,那会很好,但不幸的是,如果没有一些复杂的低级工作,这是不可能的。

在底层 WinAPI 中, native 窗口仅在收到 WM_PAINT 消息时才重绘自身,并且它们仅在可见时才收到 WM_PAINT 消息。如果他们在另一个窗口后面,或者如果他们被拖出屏幕,或最小化,或者他们的可见性设置为 False,则他们不会收到消息。当屏幕关闭时,它们也不可见。因为它们是不可见的,所以它们根本不会被告知重新绘制自己。这就是为什么屏幕关闭后屏幕捕获图像不会改变的原因。

没有任何命令可以覆盖它——它是作为窗口范式的基本部分实现的。

一个解决方案是让应用程序在不是窗口的东西(例如对话框)中绘制自己并捕获它而不是捕获屏幕。您还可以通过覆盖 OnPaint 并使用计时器使您的 OnPaint 函数失效并定期调用它来修改应用程序(因为不会收到 WM_PAINT 消息)。

如果是我,我会重写 OnPaint,让我的应用程序将自己绘制到背景上下文位图而不是普通窗口,然后使用计时器定期失效和重绘,并在需要时获取背景上下文的位图捕获输出。

如果您不拥有正在运行的应用程序的代码,您仍然可以通过在虚拟机中运行所有内容来让应用程序自行重绘。过去,我已经为 headless 计算成功地做到了这一点,但这是许多操作系统版本之前的事情,现在情况可能有所不同,所以 YMMV...

VMWare下手动截图信息为here .

有关 Hyper-V 下编程屏幕截图的信息是 here .

关于python - 如果笔记本电脑屏幕关闭,通过 printwindow 获取屏幕截图不会重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49217823/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com