Как сделать снимок экрана в буфер на c++?

Пользователь

от jeremy_larkin , в категории: C/C++ , 10 месяцев назад

Как сделать снимок экрана в буфер на c++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от hoyt.jerde , 10 месяцев назад

@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 - координаты и размеры прямоугольника на экране, который нужно снять. Результат сохраняется в буфере обмена.