gpt4 book ai didi

c++ - 覆盖/最小化窗口的屏幕截图

转载 作者:太空狗 更新时间:2023-10-29 21:08:48 27 4
gpt4 key购买 nike

我有以下代码来截取窗口的屏幕截图:

HDC WinDC;
HDC CopyDC;
HBITMAP hBitmap;
RECT rt;

GetClientRect (hwnd, &rt);
WinDC = GetDC (hwnd);
CopyDC = CreateCompatibleDC (WinDC);

hBitmap = CreateCompatibleBitmap (WinDC,
rt.right - rt.left, //width
rt.bottom - rt.top);//height

SelectObject (CopyDC, hBitmap);

//Copy the window DC to the compatible DC
BitBlt (CopyDC, //destination
0,0,
rt.right - rt.left, //width
rt.bottom - rt.top, //height
WinDC, //source
0, 0,
SRCCOPY);

ReleaseDC(hwnd, WinDC);
ReleaseDC(hwnd, CopyDC);

这是别人的代码,稍作修改,因为我不太熟悉 DC 以及 Windows 如何将内容绘制到屏幕上。

当我有一个窗口稍微覆盖另一个窗口时,覆盖窗口会出现在被覆盖窗口的屏幕截图上,这有点不方便。此外,当窗口最小化时,这段代码不会产生任何有趣的结果。

有什么办法解决这个问题吗?我想截取最小化应用程序的屏幕截图会非常困难,但我希望获取覆盖窗口的屏幕截图是可能的。也许有不同的实现方法来解决这些问题?

最佳答案

不,截图正是它听起来的样子。您将从视频适配器中读取像素,所见即所得。您必须恢复窗口并将其置于前台以获得完整 View 。 WM_SYSCOMMAND+SC_RESTORE 和 SetForegroundWindow() 分别。再加上一些时间让应用程序在必要时重新绘制其窗口。

WM_PRINT 消息可用于请求窗口将其自身绘制到内存上下文中。这可以处理重叠的窗口问题。但这只有在你的窗口时才有效。而且很少有预期的结果,程序员通常不会正确地实现 WM_PRINT。

关于c++ - 覆盖/最小化窗口的屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2464826/

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