获取窗口截图windows API

Oli*_*ver 4 c++ graphics winapi screenshot

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

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

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

Ash*_*ish 5

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

void CreateImage(HWND hwnd)
{
    CImage img;
    img.m_hDC = ::GetWindowDC(hwnd);
    img.Save(strFileName);
}
Run Code Online (Sandbox Code Playgroud)


Leo*_*Leo 3

一种简单的方法是使用PrintWindowAPI(基本上是自动的 Alt + Print)。以下示例截取了计算器的屏幕截图,但您只需更换手柄即可。

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 );
}
Run Code Online (Sandbox Code Playgroud)

(请参阅https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-printwindow