2010-03-15 177 views
4

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

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

希望这不是一个明显的问题,我在google中输入了一些东西,但没有得到任何相关的信息。

回答

4

一个简单的方法是使用PrintWindow API(基本上是一个自动的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); 
} 

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

+0

我无法找到关于MSDN – jondinham 2011-09-03 11:02:04

+0

上PrintWindow函数的描述,请描述如何保存为位图对象以供重用 – jondinham 2011-09-03 11:06:41

5

我觉得CImage班会有帮助。

void CreateImage(HWND hwnd) 
{ 

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

} 
+0

这看起来很方便,谢谢。我会尝试一下。 – Oliver 2010-03-15 14:49:58