[英]Screen capture of specific window c++
我想截取某個特定窗口(例如計算器)的屏幕截圖。
這是我根據這個討論編寫的代碼:
// Get the window handle of calculator application.
HWND hWnd = ::FindWindow(0, _T("Calculator"));
RECT r;
GetWindowRect(hWnd, &r);
int x[2]; int y[2];
x[0] = r.top; x[1] = r.bottom;
y[0] = r.left; y[1] = r.right;
HDC hScreen = GetWindowDC(hWnd);
HDC hDC = CreateCompatibleDC(hScreen);
HBITMAP hBitmap = CreateCompatibleBitmap(hScreen, y[1] - y[0], x[1] - x[0]);
HGDIOBJ old_obj = SelectObject(hDC, hBitmap);
BitBlt(hDC, 0, 0, y[1] - y[0], x[1] - x[0], hScreen, y[0], x[0], SRCCOPY);
之后,我將位圖保存為 .bmp 圖像。
結果具有計算器窗口的正確大小和位置,但生成的 bmp 全黑。
我嘗試對整個桌面進行截圖,然后剪切計算器部分,結果奏效了。 但我希望能夠制作窗口的屏幕截圖,即使它被最小化或被另一個窗口覆蓋。
任何想法為什么此代碼不起作用或有其他方法可以做到嗎?
謝謝。
一種可供考慮的方法是CreateForWindow 。
考慮到目標窗口是可移動的,另一個角度是將其重新定位到當前桌面的左上角。 執行整個屏幕的捕獲,然后,假設您知道窗口的尺寸,將其裁剪為這些尺寸。
如果安全程序可以被暫停或終止,目標窗口沒有隱藏,或者以上述評論中討論的方式合成,或者當 Aero 可以暫時禁用時,這有更好的成功機會。
最簡單的方法是使用PrintWindow 。
下面是一些例子:
PrintWindow(calculatorHwnd, destHwnd, 0);
PrintWindow(calculatorHwnd, destHwnd, PW_CLIENTONLY);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.