@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; } |
Этот код получит размеры рабочего стола и сделает скриншот всего экрана, который будет помещен в буфер обмена.