- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的目标是在笔记本电脑屏幕关闭时截取应用程序的屏幕截图,但屏幕截图将始终与关闭屏幕之前的屏幕截图相同。一旦屏幕关闭,它不会重新绘制自身,并保持卡住状态。
我正在使用 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/
我正在一个大项目中实现一个打印函数来打印所谓的小工具(派生自 CWnd)。在小工具类中,我创建了一个函数来将其呈现到设备上下文 PrintPageContent(CDC * pDC, const CR
我在 Windows XP 上,我正在 try catch 一个窗口。 但是当我捕获一个窗口时,我得到了窗口标题(名称和图标)但是窗口的整个内容都是黑色的。 当试图保存图片时,整个图片是透明的。 这是
我正在使用 PrintWindow 制作 IE 的屏幕截图。问题是有时我会得到带有黑色区域的图像。它可能是整个 html 内容什么是黑色的,有时只有某些区域是黑色的。 IE 的内容在拍摄之间不会改变。
我正在尝试截取 Chrome 窗口的屏幕截图。它看起来像这样: 当我使用 PrintWindow 时要获取屏幕截图,我可以在窗口标题栏/Chrome 选项卡区域看到闪烁。捕获的屏幕截图包含 Windo
经过几个小时的谷歌搜索,我设法“写下”了这个: import win32gui from ctypes import windll hwnd = win32gui.FindWindow(None, '
因此,我在尝试使用 PrintWindow API 为位于非事件桌面上的窗口拍照时遇到了一个问题,它开始让我感到不安。 问题是对于一个特定的窗口,即使 PrintWindow 成功并且我得到了我想要的
我正在尝试使用 PrintWindow 让 chrome 在我的 Canvas 上绘画。这是我用来呈现桌面捕获的代码 PRECT lpRect; GetWindowRect(g_Window, lpR
我已经成功地让 PrintWindow 在 C++ 中工作,但是当我尝试在 C# 中工作时,我得到了一个包含空数据的位图。在 .NET 4.0 上使用 VS 2012 Pro。这是我的代码:
我的目标是在笔记本电脑屏幕关闭时截取应用程序的屏幕截图,但屏幕截图将始终与关闭屏幕之前的屏幕截图相同。一旦屏幕关闭,它不会重新绘制自身,并保持卡住状态。 我正在使用 Python 中的 printwi
我正在使用 PrintWindow API 截取特定窗口 (hwnd) 的屏幕截图。这工作得很好,它截取了整个窗口的屏幕截图。我的问题是:我的窗口高度是 742,宽度是 653。如果我想截取窗口中间某
当使用 Print Screen+Alt 组合键手动捕获窗口时,我得到以下信息: 但如果我尝试使用 Windows API 以编程方式执行此操作,我明白了: 为什么会出现差异?我如何以编程方式获得第一
我有一个 C++ 程序可以捕获特定窗口的屏幕截图并使用以下代码保存 int main() { GdiplusStartupInput gdiplusStartupInput; ULON
我在 HTML 页面中有一个部分需要打印。我使用下面的JS方法来打印它。 printWindow.print(); 我就是这样做的。 $("#toprint").on("click", functio
我使用的是 Microsoft Visual Studio 2010 和 Windows 7 Professional。这是我将窗口图像复制到剪贴板的代码: void PrintWindowEx( H
我是一名优秀的程序员,十分优秀!