【发布时间】:2015-03-15 05:06:59
【问题描述】:
我正在制作一个截取整个屏幕的 C++ 程序。我面临着一个相当大的问题。当我运行程序时,它只截取控制台屏幕,而不是整个桌面。
HDC Screen = CreateDC(L"DISPLAY", NULL, NULL, NULL);
HDC Capture = CreateCompatibleDC(Screen);
int width = GetDeviceCaps(Screen, HORZRES);
int height = GetDeviceCaps(Screen, VERTRES);
LPBYTE lpcapture;
BITMAPINFO bmiCapture =
{ { sizeof(BITMAPINFOHEADER),width,height,1,24,BI_RGB,0,0,0,0,0 } };
HBITMAP hbmCapture = CreateDIBSection(Screen, &bmiCapture, DIB_RGB_COLORS, (LPVOID *)&lpcapture, NULL, 0);
if (hbmCapture)
{
HBITMAP hbmOld = (HBITMAP) SelectObject(Capture, Capture);
BitBlt(Capture, 0, 0, width, height, Screen, 0, 0, SRCCOPY);
SelectObject(Capture, hbmOld);
}
DeleteDC(Capture);
DeleteDC(Screen);
return hbmCapture;
【问题讨论】:
-
我用的是WinSnap工具,付费版。很好(虽然在以前的版本中更好)。不完美但很好。它表明,与建议重复的选定答案相反,这是很有可能的。
-
stackoverflow.com/questions/3291167/… 如何将全屏复制到剪贴板的答案适用于 Windows 7 并捕获我的两个显示器。试试看是不是骗子。
-
我刚刚在 win 8.1 上进行了测试,它工作正常。我把它放在一个Windows程序中,我不知道你所说的控制台屏幕是什么意思。也许试试
GetSystemMetrics(SM_CXFULLSCREEN);和SM_CYFULLSCREEN的宽度和高度。 -
我正在制作一个控制台程序来捕获屏幕截图。所以,我说了。它只截取了控制台屏幕的屏幕截图
标签: c++ windows screenshot