下面的代码有什么问题?为什么
PrintWindow
返回0?
HWND hwnd = GetDesktopWindow();
CHK(hwnd);
HDC hdc = GetWindowDC(hwnd);
CHK(hdc);
if (hdc)
{
HDC hdcMem = CreateCompatibleDC(hdc);
CHK(hdcMem);
if (hdcMem)
{
RECT rc;
CHK(GetWindowRect(hwnd, &rc));
HBITMAP hbitmap = CreateCompatibleBitmap(hdc, rc.right-rc.left, rc.bottom-rc.top);
CHK(hbitmap);
if (hbitmap)
{
SelectObject(hdcMem, hbitmap);
CHK(PrintWindow(hwnd, hdcMem, 0)); //HERE return 0
DeleteObject(hbitmap);
}
DeleteObject(hdcMem);
}
ReleaseDC(hwnd, hdc);
}
更换:
HWND hwnd = GetDesktopWindow();
与:
HWND hwnd = GetDesktopWindow();
hwnd = FindWindowEx( hwnd, 0, _T("Progman"), _T("Program Manager") );
我不确定这是否能得到你想要的。如果您想截取整个当前桌面(包括任何可见的顶级窗口)的屏幕截图,那么 BitBlt 就是您想要采取的路线。
如果你也想获得任务栏,你仍然可以使用此方法,但你必须截取两张屏幕截图并将结果拼接在一起。