C++ 获取windows API的窗口截图
我正在尝试制作一个在现有GUI上运行的程序,以对其进行注释,并提供额外的计算和统计信息。我想用图像识别来做这件事,因为我在大学里用Matlab和类似的东西学到了很多。我可以获得要执行图像识别的窗口的句柄,但我不知道如何将该句柄转换为该窗口及其所有可见子窗口的图像。我想我正在寻找类似屏幕截图的功能,但仅限于一个窗口 我该怎么做呢?我想我需要像.bmp这样的东西来摆弄。而且,它必须足够高效,我可以每秒调用它几次,而不会让我的电脑死机 希望这不是一个明显的问题,我在谷歌上输入了一些东西,但没有得到任何相关信息。我认为这门课会有所帮助C++ 获取windows API的窗口截图,c++,winapi,graphics,screenshot,C++,Winapi,Graphics,Screenshot,我正在尝试制作一个在现有GUI上运行的程序,以对其进行注释,并提供额外的计算和统计信息。我想用图像识别来做这件事,因为我在大学里用Matlab和类似的东西学到了很多。我可以获得要执行图像识别的窗口的句柄,但我不知道如何将该句柄转换为该窗口及其所有可见子窗口的图像。我想我正在寻找类似屏幕截图的功能,但仅限于一个窗口 我该怎么做呢?我想我需要像.bmp这样的东西来摆弄。而且,它必须足够高效,我可以每秒调用它几次,而不会让我的电脑死机 希望这不是一个明显的问题,我在谷歌上输入了一些东西,但没有得到任何
void CreateImage(HWND hwnd)
{
CImage img;
img.m_hDC = ::GetWindowDC(hwnd);
img.Save(strFileName);
}
一种简单的方法是使用
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 );
}
(请参阅)我在msdn上找不到关于函数PrintWindow的描述请描述如何另存为位图对象以供重用不确定这是否是自定义的,但我已将无效链接替换为指向msdn的链接。