我有这个代码
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工作室给我)。我怀疑问题出在获取设备上下文上,但我尝试了一些替代方法并遇到了同样的问题。我该如何解决这个问题?
答案 0 :(得分:0)
使用本文中的 DirectX 方法:https://www.codeproject.com/Articles/5051/Various-methods-for-capturing-the-screen 调用 GetFrontBufferData 后,您可以简单地将位图保存到磁盘或挖掘实际图像数据并使用 SetDIBits 将其分配给 HBITMAP。