获取窗口截图windows API

时间:2010-03-15 12:52:46

标签: c++ winapi graphics screenshot

我正在尝试使程序在现有GUI之上工作以对其进行注释并提供额外的计算和统计信息。我想使用图像识别来做到这一点,因为我在大学里使用Matlab和类似的东西学到了相当多的东西。我可以获得我想要执行图像识别的窗口的句柄,但我不知道如何将该句柄转换为该窗口的图像及其所有可见的子窗口。我想我正在寻找截图功能,但仅限于一个窗口。

我该怎么做呢?我想我需要像.bmp这样的东西搞砸了。此外,它必须足够高效,以至于我可以每秒多次调用它而不会让我的PC停止运转。

希望这不是一个明显的问题,我在google中键入了一些内容,但没有得到任何相关内容。

2 个答案:

答案 0 :(得分:5)

我认为CImage课程会有所帮助。

void CreateImage(HWND hwnd)
{

CImage img;
img.m_hDC = ::GetWindowDC(hwnd);
img.Save(strFileName);

}

答案 1 :(得分:4)

一种简单的方法是使用PrintWindow API(基本上是自动Alt +打印)。以下示例获取计算器的屏幕截图,但您只需要替换句柄。

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 );
}

(见http://weseetips.com/2008/07/14/how-to-capture-the-screenshot-of-window/