问题
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