C++ 对多个屏幕截图
时间: 2023-11-14 17:11:20 浏览: 63
要对多个屏幕进行截图,你需要使用 Windows API 函数来获取每个屏幕的句柄和矩形区域。然后,你可以使用 GDI+ 库中的 `Bitmap` 类创建一个位图对象,并使用 `Graphics` 类的 `CopyFromScreen` 方法将屏幕内容复制到位图中。最后,你可以将位图保存到文件中。下面是一个简单的 C++ 示例代码:
```cpp
#include <windows.h>
#include <gdiplus.h>
#include <vector>
#include <string>
#pragma comment(lib, "gdiplus.lib")
using namespace Gdiplus;
int main()
{
// 初始化 GDI+
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, nullptr);
// 获取所有屏幕的句柄
std::vector<HWND> screens;
EnumDisplayMonitors(nullptr, nullptr, [](HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) -> BOOL {
screens.push_back((HWND)dwData);
return TRUE;
}, (LPARAM)nullptr);
// 对每个屏幕进行截图
for (int i = 0; i < screens.size(); i++) {
HWND hWnd = screens[i];
// 获取屏幕矩形区域
RECT rect;
GetWindowRect(hWnd, &rect);
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
// 创建位图和绘图对象
Bitmap bitmap(width, height, PixelFormat32bppARGB);
Graphics graphics(&bitmap);
// 复制屏幕内容到位图中
graphics.CopyFromScreen(rect.left, rect.top, 0, 0, Size(width, height));
// 保存位图到文件
std::wstring filename = L"screen" + std::to_wstring(i) + L".bmp";
bitmap.Save(filename.c_str(), &CLSID_Bmp, nullptr);
}
// 关闭 GDI+
GdiplusShutdown(gdiplusToken);
return 0;
}
```
该代码使用了 `EnumDisplayMonitors` 函数来获取所有屏幕的句柄,并对每个屏幕进行截图。对于每个屏幕,它先获取屏幕的矩形区域,然后创建一个位图和绘图对象,最后使用 `CopyFromScreen` 方法将屏幕内容复制到位图中,并将位图保存到文件中。
阅读全文