Специальное окно захвата экрана
Можно ли отображать конкретное окно (возможно, другого процесса)?
В настоящее время я захватываю весь рабочий стол определенного монитора, однако я действительно хочу, чтобы захватить содержимое определенного окна (независимо от его положения).
Ответы
Ответ 1
Да, это так. Все, что вам нужно, это обработать окно, которое вы хотите захватить, и использовать функцию WinAPI PrintWindow, например:
// Get the window handle of calculator application.
HWND hWnd = ::FindWindow( 0, _T( "Calculator" ));
// Take screenshot.
PrintWindow( hWnd, getDC(hWnd), 0 );
Здесь у вас есть документация PrintWindow.
Ответ 2
Да, так же просто, как захват всего экрана. Вы просто используете GetWindowDC()
в нужном окне, а не GetDesktopWindow()
, а затем BitBlt()
от этого к целевому DC. Вы также можете получить правильный размер, используя GetWindowRect()
.
Обратите внимание, что этот метод также позволяет захватывать скрытые/закрытые окна, где нет полного скриншота с ограничивающим прямоугольником.
Подробнее см. этот вопрос.