问题
Is it possible to screen capture a specific window (also possibly of another process)?
Currently I am capturing the entire desktop of a specific monitor, however what I truly want is to capture the content of a specific window (regardless of its position).
回答1:
Yes it is. All what you need is get handle to window which you want to capture and use WinAPI function PrintWindow for example:
// Get the window handle of calculator application.
HWND hWnd = ::FindWindow( 0, _T( "Calculator" ));
// Take screenshot.
PrintWindow( hWnd, getDC(hWnd), 0 );
Here you have PrintWindow documentation.
回答2:
Yes, Just as easy as capturing the full screen. You just use GetWindowDC()
on the required window rather than GetDesktopWindow()
, then BitBlt()
from that to your target DC. You can also get the correct size by using GetWindowRect()
.
Note that this method also allows you to capture from hidden/covered windows where a full screenshot with a bounding rectangle doesn't.
See this question for some more details.
来源:https://stackoverflow.com/questions/11283015/screen-capture-specific-window