Hi I am trying to create an application in C#.net that captures the screenshot of the current active including the area that has to be scrolled using scroll bars.I found the following code to take screenshot. TO be very clear I want the code to take screenshot of the active window including the area that is not displayed and is only revealed by using scroll bars. Any help is greatly appreciated.Thank you
publicclass ScreenShot {///<summary>/// Captures the screenshot of the entire desktop///</summary>///<returns>Image object containing the screenshot of the desktop</returns>private Image CaptureDesktop() {return CaptureWindow(User32.GetDesktopWindow()); }public Image CaptureAciveWindow() {return CaptureWindow(User32.GetForegroundWindow()); }///<summary>/// An Internal method, that captures the screenshot of any given Application window, given its Handle.///</summary>///<param name="handle">The handle of the window you want to Capture</param>///<returns>An Image object containing the screenshot of the active application window</returns>private Image CaptureWindow(IntPtr handle) {// get te hDC of the target window IntPtr hdcSrc = User32.GetWindowDC(handle);// get the size User32.RECT windowRect = new User32.RECT(); User32.GetWindowRect(handle, ref windowRect);int width = windowRect.right - windowRect.left;int height = windowRect.bottom - windowRect.top;// create a device context we can copy to IntPtr hdcDest = GDI32.CreateCompatibleDC(hdcSrc);// create a bitmap we can copy it to,// using GetDeviceCaps to get the width/height IntPtr hBitmap = GDI32.CreateCompatibleBitmap(hdcSrc, width, height);// select the bitmap object IntPtr hOld = GDI32.SelectObject(hdcDest, hBitmap);// bitblt over GDI32.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, GDI32.SRCCOPY);// restore selection GDI32.SelectObject(hdcDest, hOld);// clean up GDI32.DeleteDC(hdcDest); User32.ReleaseDC(handle, hdcSrc);// get a .NET image object for it Image img = Image.FromHbitmap(hBitmap);// free up the Bitmap object GDI32.DeleteObject(hBitmap);return img; }///<summary>/// Helper class containing Gdi32 API functions///</summary>privateclass GDI32 {publicconstint SRCCOPY = 0x00CC0020; // BitBlt dwRop parameter [DllImport("gdi32.dll")]publicstaticexternbool BitBlt(IntPtr hObject, int nXDest, int nYDest,int nWidth, int nHeight, IntPtr hObjectSource,int nXSrc, int nYSrc, int dwRop); [DllImport("gdi32.dll")]publicstaticextern IntPtr CreateCompatibleBitmap(IntPtr hDC, int nWidth,int nHeight); [DllImport("gdi32.dll")]publicstaticextern IntPtr CreateCompatibleDC(IntPtr hDC); [DllImport("gdi32.dll")]publicstaticexternbool DeleteDC(IntPtr hDC); [DllImport("gdi32.dll")]publicstaticexternbool DeleteObject(IntPtr hObject); [DllImport("gdi32.dll")]publicstaticextern IntPtr SelectObject(IntPtr hDC, IntPtr hObject); }///<summary>/// Helper class containing User32 API functions///</summary>privateclass User32 { [StructLayout(LayoutKind.Sequential)]publicstruct RECT {publicint left;publicint top;publicint right;publicint bottom; } [DllImport("user32.dll")]publicstaticextern IntPtr GetDesktopWindow(); [DllImport("user32.dll")]publicstaticextern IntPtr GetWindowDC(IntPtr hWnd); [DllImport("user32.dll")]publicstaticextern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC); [DllImport("user32.dll")]publicstaticextern IntPtr GetWindowRect(IntPtr hWnd, ref RECT rect);///<summary>/// Gets the Handle for current active window///</summary>///<returns>Active windows Handle</returns> [DllImport("user32.dll")]publicstaticextern IntPtr GetForegroundWindow(); } }
get C# code samples and tips at C# Programming help