How to get screenshot of a window as bitmap object in C++?(如何在 C++ 中将窗口的屏幕截图作为位图对象获取?)
问题描述
如何在 C++ 中将窗口的屏幕截图作为位图对象获取?假设我已经有了窗口句柄.我还想知道是否可以在窗口处于最小化状态时获取屏幕截图?
How to get screenshot of a window as bitmap object in C++? Supposed that I already have the window handle. And I want to know also whether it's possible to get the screenshot of a window when it's in minimized state?
这里的 C++ 是指 VC++ 以及与 Windows XP+ (win32) 相关的所有库.
C++ here means VC++ with all the libraries associated with Windows XP+ (win32).
推荐答案
你应该调用 PrintWindow API:
you should call the 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 );
}
看到这个问题:获取窗口截图windows API
如果你不使用 MFC,这里是纯 PrintWindow 签名:
if you are not using MFC, here the pure PrintWindow signature:
BOOL PrintWindow(
HWND hwnd,
HDC hdcBlt,
UINT nFlags
);
有关更多详细信息,请参阅 MSDN:http:///msdn.microsoft.com/en-us/library/dd162869(v=vs.85).aspx
see MSDN for more details: http://msdn.microsoft.com/en-us/library/dd162869(v=vs.85).aspx
关于如何像Matteo所说的那样将其保存为位图取决于您使用的实际框架...
about how to save it as bitmap asMatteo said depends on the actual framework you are using...
这里是原始 C++ 中的完整示例
here full example in raw 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;
}
这篇关于如何在 C++ 中将窗口的屏幕截图作为位图对象获取?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在 C++ 中将窗口的屏幕截图作为位图对象获取?
基础教程推荐
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 从 std::cin 读取密码 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01