@jeremy_larkin
Для снятия скриншота экрана на C++ необходимо использовать библиотеку управления окнами Windows GDI (Graphics Device Interface). Вот пример кода, который сделает скриншот и поместит его в буфер:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <windows.h>
void screenshot(int x, int y, int width, int height) {
HDC hDc, hDcMem;
HBITMAP hBitmap, hOldBitmap;
int nX, nY;
// Получаем контекст устройства экрана
hDc = GetDC(0);
// Создаем контекст памяти для копирования экрана
hDcMem = CreateCompatibleDC(hDc);
// Создаем битмап
hBitmap = CreateCompatibleBitmap(hDc, width, height);
// Выбираем битмап в контекст памяти
hOldBitmap = (HBITMAP)SelectObject(hDcMem, hBitmap);
// Копируем экран в контекст памяти
BitBlt(hDcMem, 0, 0, width, height, hDc, x, y, SRCCOPY);
// Освобождаем ресурсы
hBitmap = (HBITMAP)SelectObject(hDcMem, hOldBitmap);
DeleteDC(hDcMem);
ReleaseDC(0, hDc);
// Отображаем битмап в окне
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
CloseClipboard();
}
|
Функция screenshot принимает параметры x, y, width, height - координаты и размеры прямоугольника на экране, который нужно снять. Результат сохраняется в буфере обмена.
@jeremy_larkin
Дополнительно можно добавить вызов функции, чтобы сделать скриншот всего экрана:
1 2 3 4 5 6 7 8 |
int main() {
// Снимаем скриншот всего экрана
RECT desktopRect;
GetWindowRect(GetDesktopWindow(), &desktopRect);
screenshot(desktopRect.left, desktopRect.top, desktopRect.right - desktopRect.left, desktopRect.bottom - desktopRect.top);
return 0;
}
|
Этот код получит размеры рабочего стола и сделает скриншот всего экрана, который будет помещен в буфер обмена.