【发布时间】:2014-06-26 14:20:57
【问题描述】:
我需要以.bmp 格式获取特定窗口的屏幕视图。换句话说,我需要拥有alt+printscreen 的功能,即使窗口在后面或最小化,它也需要工作。所以我在下面写了一个函数,它返回一个HBITMAP类型,以便稍后将视图保存为.bmp文件和另一个函数。
HBITMAP CaptureWindowBitmap(HWND MyHWND)
{
HDC hWindowDC = GetWindowDC(MyHWND);
HDC hMemoryDC = CreateCompatibleDC(hWindowDC);
int x = GetDeviceCaps(hWindowDC, HORZRES);
int y = GetDeviceCaps(hWindowDC, VERTRES);
HBITMAP hBitmap = CreateCompatibleBitmap(hWindowDC, x, y);
HBITMAP hBitmapOld = (HBITMAP)SelectObject(hMemoryDC, hBitmap);
BitBlt(hMemoryDC, 0, 0, x, y, hWindowDC, 0, 0, SRCCOPY);
hBitmap = (HBITMAP)SelectObject(hMemoryDC, hBitmapOld);
DeleteDC(hMemoryDC);
DeleteDC(hWindowDC);
return hBitmap;
}
但是我的函数获取整个屏幕的图像。我该如何解决这个问题?
【问题讨论】:
-
您是否确认 MyHWND 确实是您需要捕获的窗口的句柄?您是否使用 Spy++ 或类似工具进行验证?
-
如果窗口不在前景中,或者被另一个窗口部分覆盖,或者被最小化,则不能保证它会被吸引到您试图从中复制的 DC。
-
好的,我想通了!