Quantcast
Channel: Windows Forms General forum
Viewing all articles
Browse latest Browse all 12583

How to take a screenshot of a Full Size window in C#

$
0
0

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

Viewing all articles
Browse latest Browse all 12583

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>