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