在全屏应用程序运行时获取屏幕的位图

时间:2021-05-19 01:52:00

标签: c++ windows winapi

我有这个代码

Post content parameters

生成屏幕的 // get the device context of the screen HDC hScreenDC = GetDC(NULL); // and a device context to put it in HDC hMemoryDC = CreateCompatibleDC(hScreenDC); int width = GetSystemMetrics(SM_CXVIRTUALSCREEN); int height = GetSystemMetrics(SM_CYVIRTUALSCREEN); HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, width, height); // get a new bitmap HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemoryDC, hBitmap); BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY); hBitmap = (HBITMAP)SelectObject(hMemoryDC, hOldBitmap); // clean up DeleteDC(hMemoryDC); DeleteDC(hScreenDC); 。它在大多数情况下都可以完美运行,但是如果我在浏览器(例如 Youtube)上全屏显示某些内容时尝试运行它,则捕获的图像不是视频,而是在后台运行的其他程序(Visual工作室给我)。我怀疑问题出在获取设备上下文上,但我尝试了一些替代方法并遇到了同样的问题。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

使用本文中的 DirectX 方法:https://www.codeproject.com/Articles/5051/Various-methods-for-capturing-the-screen 调用 GetFrontBufferData 后,您可以简单地将位图保存到磁盘或挖掘实际图像数据并使用 SetDIBits 将其分配给 HBITMAP。