如何获取窗口的位图对象在C + +的屏幕截图?

如何获取窗口位图对象在C + +的屏幕截图? 假设我已经有窗口句柄了。 而且我也想知道当它处于最小化状态时是否可以获得窗口的屏幕截图

这里的C ++是指所有与Windows XP +(win32)相关的库的VC ++。

Solutions Collecting From Web of "如何获取窗口的位图对象在C + +的屏幕截图?"

你应该调用PrintWindow API:

 void CScreenShotDlg::OnPaint() { // device context for painting CPaintDC dc(this); // Get the window handle of calculator application. HWND hWnd = ::FindWindow( 0, _T( "Calculator" )); // Take screenshot. PrintWindow( hWnd, dc.GetSafeHdc(), 0 ); } 

看到这个问题: 获取窗口截图窗口API

如果你不使用MFC,这里是纯粹的PrintWindow签名:

 BOOL PrintWindow( HWND hwnd, HDC hdcBlt, UINT nFlags ); 

有关更多详细信息,请参阅MSDN: http : //msdn.microsoft.com/zh-cn/library/dd162869(v=vs.85).aspx

关于如何将其保存为位图的方式,取决于您正在使用的实际框架…

编辑:

这里的原始C ++完整的例子

 #define _WIN32_WINNT 0x0501 //xp #include <windows.h> int main() { RECT rc; HWND hwnd = FindWindow(TEXT("Notepad"), NULL); //the window can't be min if (hwnd == NULL) { cout << "it can't find any 'note' window" << endl; return 0; } GetClientRect(hwnd, &rc); //create HDC hdcScreen = GetDC(NULL); HDC hdc = CreateCompatibleDC(hdcScreen); HBITMAP hbmp = CreateCompatibleBitmap(hdcScreen, rc.right - rc.left, rc.bottom - rc.top); SelectObject(hdc, hbmp); //Print to memory hdc PrintWindow(hwnd, hdc, PW_CLIENTONLY); //copy to clipboard OpenClipboard(NULL); EmptyClipboard(); SetClipboardData(CF_BITMAP, hbmp); CloseClipboard(); //release DeleteDC(hdc); DeleteObject(hbmp); ReleaseDC(NULL, hdcScreen); cout << "success copy to clipboard, please paste it to the 'mspaint'" << endl; return 0; } 

如果有人有兴趣获得最小化窗口的PrintWindow图片,在这里你可以得到的想法,如何做到这一点: http : //www.codeproject.com/Articles/20651/Capturing-Minimized-Window-A-Kid- S-绝招

快乐编码;)

看起来像PrintWindow正在与前缓冲区。 我试图采取IE截图。 打开新的链接,并尝试获取图片。 它会显示上一个链接的图片。